[scala之二]控制結構和函式
阿新 • • 發佈:2018-12-25
概覽
(scala語句和表示式幾乎都有值) PK (java中語句有值,表示式執行動作)
1.條件表示式
if(x>0) 1 else -1
可以將表示式結果直接賦值給變數
val s = if(x>0) 1 else -1
scala支援混合型表示式
if(x>0) "positive" else -1
在scala中每個表示式都應有值if(x>0) 1 else () //()表示Unit類,即佔位符
2.語句終止、表示式賦值與輸出列印
①.scala行尾一般不新增;結尾
②.表示式賦值的返回值為Unit,所以scala不支援x=y=1這種連續賦值[結果為y=1,x=Unit是沒有意義的]
③.scala既支援java風格的println/print方式輸出,也支援c風格的printf格式輸出
3.迴圈
①.while迴圈
int x=10
int i=0
while(x>0){
i+=x
x-=1
}
②.for迴圈: [1 to n]是一個Range集合
int r=0
int n=10
for(i<-1 to n){
r+=i
}
當不需要上限時,使用util代替to
String s = "hello"
for(i<-0 until s.length){
print(i)
}
或者簡寫為
for(ch<-"hello") print(ch)
③.高階for
多個生成器,逗號分隔
for(i<-1 to 3;j<-1 to 3) print("i*j="+i*j +" ")
守衛:if開頭的Boolean表示式for(i<-1 to 3;j<-1 to 3 if j!=i ) print("i*j="+i*j +" ")
使用定義,比如定義fromfor(i<-1 to 3;from = 4-i; j<-from to 3 ) print("i*j="+i*j +" ")
④.for推導式:for迴圈體以yield開始,會生成一個集合,每次迭代生成集合中的一個值
for(i<-1 to 10) yield i*3
4.函式
scala的方法操作物件,而函式不是。
函式定義:函式名、引數、函式體
函式返回值:無需定義return,預設使用最後一個表示式返回;型別為=右側表示式的型別
def abs(x:Double)=if(x>=0) x else -x
遞迴函式需要定義返回值型別
def fac(n:Int) :Int = if(n<=0) 1 else n*fac(n-1)
5.過程
如果函式體包含在{}中但沒有前面的=,則返回值型別為Unit,這類函式稱為過程。