Scala教學(三)表達式與條件語句
今天要跟大家介紹 Scala
語法中,表達式與條件語句的寫法與用法。
Quick Start
接下來將要分享我的Scala
學習筆記,有任何建議與需要改進的地方,也請大家多多指教。
參考書籍Learning Scala
表達式(Expressions)
我們先來看表達式的語法定義:
val
<identifier
>[: <type
>] = <expression
>var
<identifier
>[: <type
>] = <expression
>
表達式是一個在執行後可以返回的代碼,如:1
2scala> "hel" + 'l' + "o"
res6: String = hello
這段代碼將字串做了拼接後,並將值返回用 res6
進行承接。
表達式不是只能寫作一行執行,他還可以是區塊的方式執行方式,需要用 {}
進行包裝。
我們先來看一下下面這個例子:1
2
3scala> val x = 5 * 20; val amount = x + 10
x: Int = 100
amount: Int = 110
這是兩個表達式,但是我們還可以有更好的表達方式:1
2scala> val amount = { val x = 5 * 20; x + 10 }
amount: Int = 110
我們定義了一個參數叫做 amount
當執行表達式區塊時,會將最後執行的值返回賦值給 amount
另外,它可以是多層的巢狀結構,如:1
2scala> { val a = 1; { val b = a * 2; { val c = b + 4; c } } }
res7: Int = 6
If..Else 表達式區塊
- 我們先來介紹
If
的表達式,他的意思是,當條件成立時,執行表達式
語法定義:if
(<Boolean
expression>
) <expression
>
如:1
2scala> if(1>0) println("Yes")
Yes
我們再來看一個範例:1
2scala> val result = if(1<0) "Yes"
result: Any = ()
這邊我們可以看到 result
的型態為 Any
- 再來,我們來看
If-Else
表達是
他的語法是:if
(<Boolean
expression
>) <expression
>
else
<expression
>
1 | scala> if(1<0) println("Yes") else println("No") |
- 使用
Match
表達式
語法定義:<
expression
>match
{
case
<pattern
match
> => <expression
>
[case
…]
}
1 | scala> val str = 1>0 match{ |
另外,我們可以使用 |
這個符號表示 or 的意思。
如:1
2
3
4
5scala> var bol = 2 match {
| case 1 | 2 | 3 => true
| case 4 | 5 | 6 => false
| }
bol: Boolean = true
我們也可以像 Java 一樣,提供一個 default
, Scala 的表示方式為 other
或是 _
如:1
2
3
4
5
6scala> val str = 7 match {
| case 1 | 2 | 3 => "small"
| case 4 | 5 | 6 => "big"
| case other => "error"
| }
str: String = error
與1
2
3
4
5
6scala> val str = 7 match {
| case 1 | 2 | 3 => "small"
| case 4 | 5 | 6 => "big"
| case _ => "error"
| }
str: String = error
迴圈(Loops)
迴圈是我們這個章節最後要介紹的語句。
語法:定義一個數字區間
<
starting
integer
> [to
|until
] <ending
integer
> [by
increment
]
一個基本的迴圈語法:
for
(<identifier
> <- <iterator
>) [yield
] [<expression
>]
我們來看看範例:1
2
3
4
5
6
7
8scala> for (x <- 1 to 7) {println(s"Day $x:")}
Day 1:
Day 2:
Day 3:
Day 4:
Day 5:
Day 6:
Day 7:
那如果我們想要有一個 Day X:
的集合呢?1
2scala> for (x <- 1 to 7) yield { s"Day $x:" }
res12: IndexedSeq[String] = Vector(Day 1:, Day 2:, Day 3:, Day 4:, Day 5:, Day 6:, Day 7:)
- 在迴圈中加上判斷條件
for
(<identifier
> <- <iterator
>if
<Boolean
expression
>) …
如:1
2scala> val threes = for (i <- 1 to 20 if i % 3 == 0) yield i
threes: IndexedSeq[Int] = Vector(3, 6, 9, 12, 15, 18)
巢狀迴圈
1
2
3
4scala> for { x <- 1 to 2
| y <- 1 to 3}
| {print(s"($x,$y)")}
(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)while
迴圈1
2
3
4
5
6
7
8
9
10scala> var x = 3
x: Int = 3
scala> while(x>0) {
| println(x)
| x-=1
| }
3
2
1
這次就先到這邊喔!有問題歡迎寄信給我一起討論喔!~
Donate
謝謝您的支持與鼓勵