Scala教學(三)表達式與條件語句

今天要跟大家介紹 Scala 語法中,表達式與條件語句的寫法與用法。

Quick Start

接下來將要分享我的Scala學習筆記,有任何建議與需要改進的地方,也請大家多多指教。

參考書籍Learning Scala

表達式(Expressions)

我們先來看表達式的語法定義:

val <identifier>[: <type>] = <expression>
var <identifier>[: <type>] = <expression>

表達式是一個在執行後可以返回的代碼,如:

1
2
scala> "hel" + 'l' + "o"
res6: String = hello

這段代碼將字串做了拼接後,並將值返回用 res6 進行承接。

表達式不是只能寫作一行執行,他還可以是區塊的方式執行方式,需要用 {} 進行包裝。
我們先來看一下下面這個例子:

1
2
3
scala> val x = 5 * 20; val amount = x + 10
x: Int = 100
amount: Int = 110

這是兩個表達式,但是我們還可以有更好的表達方式:

1
2
scala> val amount = { val x = 5 * 20; x + 10 }
amount: Int = 110

我們定義了一個參數叫做 amount 當執行表達式區塊時,會將最後執行的值返回賦值給 amount

另外,它可以是多層的巢狀結構,如:

1
2
scala>  { val a = 1; { val b = a * 2; { val c = b + 4; c } } }
res7: Int = 6

If..Else 表達式區塊

  • 我們先來介紹 If 的表達式,他的意思是,當條件成立時,執行表達式
    語法定義:

    if (<Boolean expression>) <expression>

如:

1
2
scala> if(1>0) println("Yes")
Yes

我們再來看一個範例:

1
2
scala> val result = if(1<0) "Yes"
result: Any = ()

這邊我們可以看到 result 的型態為 Any

  • 再來,我們來看 If-Else 表達是
    他的語法是:

    if (<Boolean expression>) <expression>
    else <expression>

1
2
scala> if(1<0) println("Yes") else println("No")
No
  • 使用 Match 表達式
    語法定義:

    <expression> match {
        case <pattern match> => <expression>
        [case…]
    }

1
2
3
4
5
scala> val str = 1>0 match{
| case true => "1>0 is true"
| case false => "1>0 is false"
| }
str: String = 1>0 is true

另外,我們可以使用 | 這個符號表示 or 的意思。
如:

1
2
3
4
5
scala> 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
6
scala> 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
6
scala> 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
8
scala> 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
2
scala> 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
2
scala> 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
    4
    scala> 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
    10
    scala> var x = 3
    x: Int = 3

    scala> while(x>0) {
    | println(x)
    | x-=1
    | }
    3
    2
    1

這次就先到這邊喔!有問題歡迎寄信給我一起討論喔!~

謝謝您的支持與鼓勵

Ads