1. 程式人生 > >[scala之二]控制結構和函式

[scala之二]控制結構和函式

概覽

(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 +" ")
使用定義,比如定義from
for(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,這類函式稱為過程。