Spark學習(4)——scala條件控制與迴圈
if表示式
If表示式的定義:在scala中,if表示式是有值得,就是if或者else中最後一行語句返回的值
例如:val age =30;if(age>18) 1 else 0
執行結果:
將if表示式賦值給一個變數:val result = if(age>18) 1 else 0
If表示式的型別推斷:由於if表示式是有值的,而if和else子句的值型別可能不同,此時if表示式的值型別是什麼呢,scala會自行推斷,取兩個型別的公共父型別
例如: if(age>18) 1 else 0,1和0都是int,所以返回值型別也是int
例如: if(age>18) “adult” else 0,
如果if後面沒有跟else 則預設else的值是Unit,也用()表示,類似於Java中的void或者null,
例如val age =30;if(age >18) “adult”,此時就相當於if(age >18) “adult” else ()
語句終結符、塊表示式
預設情況下,scala不需要語句終結符,預設將每一行作為一個語句
一行放多條語句:如果一行要放多條語句,則必須使用語句終結符
例如:使用分號作為語句終結符,
Var a,b,c
通常來說,對於多行語句,還是會使用花括號的方式
If(a<10){
b=b+1
c=c+1
}
塊表示式:塊表示式,指的就是{}中的值,其中可以包含多條語句,最後一個語句的值就是塊表示式返回的值。
例如:var d =if(a<10){b=b+1;c=c+1;b+c}
輸入與輸出
Print和println:print列印時不會加換行符,println列印時會加個換行符
例如:print(“hello world”);println(“hello world”)
Printf:printf
readLine:readLine允許我們從控制檯讀取使用者輸入的資料,類似Java中的System.in和Scanner的作用
例如:
Val name =readLine(“welcome ,please tell me your name”)
Print(“please tell me your age”)
Val age =readInt()
If(age >18){
Printf(“Hi ,%s,you are %d years old”,name,age)
}else{
Printf(“Hi ,%s,you are %d years old”,name,age)
}
迴圈
While do迴圈:scala有while do迴圈,基本語義與Java相同,例如:var n =10
While(n >0){
Print(n+” ”)
n-=1
}
Scala 沒有Java那種for迴圈,可以使用scala獨有的簡易for迴圈
簡易版for迴圈:var n=10 ;for(i <- 1 to n) print(i+” ”)
使用until:表示不達到上限,for( I <- 1 until n) print(i+” ”),如執行結果,不包括上邊界10
也可以對字串進行遍歷,類似於Java的增強for迴圈, for(c <- “Hello World”) print(c)
跳出迴圈
Scala沒有提供類似於Java的break語句
但是可以使用boolean變數,return,或者Breaks的break函式來替代使用
例如:
Import scala.util.control.Breaks._
Breakable{
var n =10
for(c <- “Hello World”) {
If(n== 5) break
Print(c)
n -=1
}
}
高階for迴圈
多重for迴圈
for(I <- 1 to 9;j< - 1 to 9){
If(j==9){
Println(I * j+” ”)
}else{
Print(I * j+” ”)
}
}
If 守衛 取偶數,scala可以在for語句中加入if判斷,例如:for(I <- 1 to 10 if i%2 ==0) print(i)
for 推導式,構造集合
例如:for(I <- 1 to 10) yield i