Scala循環表達式

今天我們來看看Scala的循環表達式。

在很多場景中我們需要將同樣的操作執行多次,而一般的順序執行語句只能執行一次,這就需要使用循環結構來完成,大部分編程語言中都提供了三種主要的循環結構(for、while和do...while),Scala也不例外。

如果你是一個Java工程師,相信你可以很輕易的寫出循環表達式,且看Java中是如何實現循環的。

while循環的實現如下,當然Java5之後還有增強型for循環,這裏不再贅述:

while(條件){
    //可執行代碼
}

 

for循環是這樣寫的:

for (初始化; 條件; 增加/遞減) {
    //可執行代碼
}

 

do...while循環是這樣寫的:

do{
//可執行代碼
}while(條件);

那麼在Scala我們應該怎麼實現它們呢?且看下文分解。


while循環

while語句中只要布爾表達式爲true,循環體中的可執行代碼就會一直重複執行下去。

語法:

while(條件){
    //可執行代碼
}
 

在循環體內,可執行代碼是順序執行的,這可以是單條語句,也可以是多條命令組成的代碼塊。

條件是一個布爾表達式,只要表達式的結果爲true,循環就會不斷執行下去,當條件爲false的時候,則退出循環,執行後續的代碼。

 

實例:

object WhileLoop extends App {
    var a =0; // 初始化
    while (a <= 5) {// 條件
        println(a)
        a = a +1// 計數增加
    }
}

 

執行結果:

0
1
2
3
4
5

在此,如果我們把條件改爲 a <= -1,那麼該循環一次都不會執行,也就是說當條件爲false的時候,會直接跳過循環主體直接執行循環後續的代碼。而如果我們條件始終爲true那麼它就是一個無限循環,永遠也不會退出,除非程序異常或者我們強制關閉。

 

無限循環實例:

object WhileLoop extends App {
    var a =0; // 初始化
    while (true) { // 條件
        println(a)
        a = a +1// 計數增加
    }
}

 

執行結果:

……
20261
20262
20263
20264
20265
20266
20267
20268
20269
Process finished with exit code -1

 

do-while循環

do…while循環與while循環類似,不同之處在於do…while循環的布爾表達式是在執行一次之後做的判斷,也就是說while循環中,如果條件爲false,則無法進入循環體。但是do…while循環則不一樣,它至少會執行一次。

 

語法:

do{
//可執行代碼
}while(條件)

 

實例:

object DoWhileLoop extends App {
    var a =0; // 初始化
    do {
        println(a)
        a = a +1// 計數增加
    } while (a <= 5)// 條件
}

 

執行結果:

0
1
2
3
4
5

在此,如果我們把條件改爲 a <= -1,則循環體仍然會被執行一次

a <= -1輸出結果爲:

0

 

同樣的,如果我們將條件改爲true那麼它就是一個無限循環,永遠也不會退出,除非程序異常或者我們強制關閉。

 

條件始終爲true執行結果:

……
20261
20262
20263
20264
20265
20266
20267
20268
20269
Process finished with exit code -1

 

for循環

Scala提供的for循環功能十分強大簡潔,雖然所有的循環結構都可以用while或者do…while 來實現,但是Scala的for循環功能不僅僅於此。

 

語法:

for( i <- range){
// 代碼塊
}

我們可以看到,這裏的語法已經和Java語言的for循環有所不同了。range是一個區間,可以用to或者until來表示。箭頭<- 表示向i賦值。

 

實例:

object ForLoop extends App {
    for (i <- 1to10) println(i)
}

 

輸出結果:

1
2
3
4
5
6
7
8
9
10

 

for循環過濾

在for中添加條件表達式可以達到過濾的效果

 

語法:

for( i <- range condition1; condition1...){
// 代碼塊
}

 

實例:

for (i <- 1 to 10 if i % 2==0 if i % 3==0) println(i)

 

輸出結果:

6

for遍歷集合

通過for可以遍歷集合,這裏類似於Java的增強for循環,語法如下:

語法:

for( i <- Collection){
// 代碼塊
}

 

實例:

object ForLoop extends App {
    val cities = List("NanJing", "SuZhou", "WuXi",
        "TaiZhou", "XuZhou", "BeiJing")
    for (city <- cities) println(city)
}

 

輸出結果:

NanJing
SuZhou
WuXi
TaiZhou
XuZhou
BeiJing

Yielding

通過yield可以返回for循環過濾的結果

語法:

for( i <- Collection if condition...){
// 代碼塊
}

 

實例:

object ForLoop extends App {
        val beijing = for (city <- cities if city == "BeiJing") yield city
        println(beijing)
}

 

輸出結果:

List(BeiJing)

從輸出我們也可以看到,返回的是一個集合類型的結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章