Scala 控制結構
1.if…else
scala中沒有三元運算子,因為根本不需要。scala中if else表示式是有返回值的,如果if或者else返回的型別不一樣,就返回Any型別(所有型別的公共超型別)。
例如:if else返回型別一樣
val a3 = 10
val a4 =
if(a3 > 20){
"a3大於20"
}else{
"a3小於20"
}
println(a4)
例如:if else返回型別不一樣
val a5 = if(a3 > 20){ "a3大於20" } println(a5)
如果缺少一個判斷,什麼都沒有返回,但是Scala認為任何表示式都會有值,對於空值,使用Unit類,寫做(),叫做無用佔位符,相當於java中的void。
注:行尾的位置不需要分號,只要能夠從上下文判斷出語句的終止即可。但是如果在單行中寫多個語句,則需要分號分割。在Scala中,{}快包含一系列表示式,其結果也是一個表示式。塊中最後一個表示式的值就是塊的值。
2.while表示式
Scala提供和Java一樣的while和do迴圈,與If語句不同,While語句本身沒有值,即整個While語句的結果是Unit型別的()。
① while迴圈
var n = 1; val while1 = while(n <= 10){ n += 1 } println(while1) println(n)
② while迴圈的中斷
import scala.util.control.Breaks
val loop = new Breaks
loop.breakable{
while(n <= 20){
n += 1;
if(n == 18){
loop.break()
}
}
}
println(n)
注:scala並沒有提供break和continue語句來退出迴圈,如果需要break,可以通過幾種方法來做
1、使用Boolean型的控制變數
2、使用巢狀函式,從函式中return
3、使用Breaks物件的break方法。
3.for表示式
Scala 也為for 迴圈這一常見的控制結構提供了非常多的特性,這些for 迴圈的特性被稱為for 推導式(for comprehension)或for 表示式(for expression)。
(1) for示例1:to左右兩邊為前閉後閉的訪問
for(i <- 1 to 3){
print(i + " ")
}
println()
(2) for示例2:until左右兩邊為前閉後開的訪問
for(i <- 1 until 3) {
print(i + " ")
}
println()
(3) for示例3:引入保護式(也稱條件判斷式,守衛)該語句只打印1 3。保護式滿足為true則進入迴圈內部,滿足為false則跳過,類似於continue
for(i <- 1 to 3 if i != 2) {
print(i + " ")
}
println()
(4) for示例4:引入變數
for(i <- 1 to 3; j = 4 - i) {
print(j + " ")
}
(5) for示例5:巢狀for迴圈
for(i <- 1 to 3; j <- 1 to 3) {
print(i*j + " ")
}
(6) for示例6:迴圈返回值(將遍歷過程中處理的結果返回到一個,使用yield關鍵字)
val for5 = for(i <- 1 to 10) yield i
println(for5)
(7) for示例7:使用花括號{}代替小括號()
for{
i <- 1 to 3
j = 4 - i}
print(i * j + " ")
注:{}和()對於for表示式來說都可以。for 推導式有一個不成文的約定:當for 推導式僅包含單一表達式時使用原括號,當其包含多個表示式時使用大括號。值得注意的是,使用原括號時,早前版本的Scala 要求表示式之間必須使用分號。