版權申明:轉載請注明出處。
文章來源:http://bigdataer.net/?p=253
排版亂?請移步原文獲得更好的閱讀體驗
2.1條件表達式
(1)if表達式有返回值,如val result = if(x>0) 0 else -1 ,則result值可能為0或-1
(2)if表達式分支語句返回值的類型不一致時,則表達式返回值的類型是它們共同的父類型Any
val result = if(x>0) 0 else "error"
則result的類型為Any
(3)若if表達式沒有分支滿足條件,則返回Unit
2.2塊表達式
(1)塊表達式的值是最后一個語句的返回值,一個塊中有多個語句時用逗號隔開。如:
val result = {val x=2;val y=3;pow(x,y)}
2.3循環
(1)while循環的實現方式和java中一樣。
(2)scala中的for循環寫法如下:
for(i <- 1 to 10){ println(i) }
(3)for推導式。如果for循環的循環體以yield開始,則該循環會構造出一個集合,每次迭代生成集合中的一個值,如:
for(i <- 1 to 10) yield i%3 //得到Vector(1,2,0,1,2,0,1,2,0,1)
2.4函數
一個函數包含了函數名稱,參數和函數體等三個元素,如:
def abs(x:Double) = if(x>=0) x else -x
如果不是遞歸函數,不需要給定返回值類型
2.5參數
(1)默認參數。調用某些函數時可以不用給出參數,此時使用默認參數。如:
def check(path:String,name:String="home")
使用check("local")時傳入的兩個參數分別為local和默認的home
(2)帶名參數。在提供參數值的時候指定參數名,帶名參數可以打亂參數列表的順序,但是帶名參數和不帶名參數共同使用時,需要將不帶名參數放在帶名參數之前。
(3)變長參數。參數列表可以為同類型的多個參數。如:
def sum(num:Int*)={
val count = 0
for(i <-num){
count +=i
}
}```
函數得到的是一個序列,但是不代表可以傳入一個序列。如sum(1 to 5)這種寫法是錯誤的。
#### 2.6懶值
當val被生命為lazy時,它的初始化會被推遲,直到其被第一次取值時。如:
`val a = 0
lazy val b = a*10`
#### 2.7異常處理
scala中異常處理與java類似。一般寫法如下:
```scala
try{
process
}catch{
case e:Throwable => some process
case _ => other process
}finally{
}```