Scala --- 第二章 控制結構和函數

輸入圖片說明

接下來的知識點,枯燥無味,但仍是須要了解一下。。。函數

一、條件表達式

輸入圖片說明

$..>if(x > 0) 1 else -1oop

$..>val s = if(x>0) 1 else -1scala

$..>if(x>0) s=1 else s=-1code

$..>if (x>0) "xx" else -1 //混合類型orm

//scala每一個語句都有值和類型對象

$..>if(x>0) 1 //若是x <= 0 ???等價於下方遞歸

$..>if(x>0) 1 else()//class Unit,寫作()圖片

//若是想要換行必須使用{},不然編譯器混淆編譯器

$..>if(x>0){1}it

else if(x == 0) 0 else -1

//若是粘貼代碼塊,無需擔憂,輸入

$..>:paste

$..>ctrl + k //scala會總體處理粘貼的代碼

二、語句結束

//scala從不要求「;」,可是有些時候須要

$..>if(n >0){r=r*n;n-=1}

//多行語句,操做符結尾不會被認爲是結束

$..>... +

....

$..>if(..){ //使用{}

r = r*n n-=1

}

三、塊表達式和賦值

輸入圖片說明

//塊的最後表達式是block的值

$..>val dis={val dx=..;...;sqrt(2)}

//如下語言不可靠,賦值語句的值是(),()不能賦值給x

//賦值語句的值就是()---Unit

$..>x=y=1

四、Loop

輸入圖片說明

$..>while(n >0){

r = r * n

n -= 1

}

//scala沒有for(;;)語句,只有以下的形式

for(i <- 1 to 10) //to的範圍是閉區間[]

r = r * i

$..>for(i <- 0 until 10) //until是半開半閉開區間[)

r = r * i

輸入圖片說明

$..>for(ch <- "abc") sun +=ch

//scala沒有break和continue語句

1.使用boolean變量

2.嵌套函數

五、高級Loop

$..>for(i<-1 to 3;j<- 1 to 3)print((10*i+i)+" ") //多個生成

//每一個生成器均可以帶條件

for(i<-1 to 3 ; j <- 1 to 3 if i !=j ) ...

12 13 21 23 31 32

//藉助變量

$..>for(i<-1 to 3;from = 4-i;j<-from to 3)...

六、函數

  • 無返回值

輸入圖片說明

//方法是在對象上,而函數不是
//函數定義指定名稱、參數和body
//必須指定參數類型
def fac(n:Int)={
  var r = 1
  for(i<-1 to 10) r = r *1  
  r	//最後的表達式是函數的返回值
}
  • 有返回值

輸入圖片說明

  • 遞歸函數

輸入圖片說明

七、變長參數

輸入圖片說明

def sum(args:Int*)={
  var r = 0 
for(arg<-args) r +=arg 
  r
}

val s = sum(1,2,4,5,6)
val s = sum(1 to 5)	   //error
val s = sum(1 to 5:_*)      //right

八、Lazy values

輸入圖片說明

九、Exception

輸入圖片說明

//scala沒有被檢異常,不用聲明拋出語句.
//throw表達式的類型是Nothing,ifesle的類型不能是
//Nothing,所以就是不爲Nothing的分支類型
throw new IllegalArgumentException("xx")

try{  ...
} catch{
  case _:MalformedURLException=>.//不適用異常對象  
  case ex:IOException =>ex.printStackTrace()
}

輸入圖片說明

try{
  ...
}finally{
  in.close()
}
相關文章
相關標籤/搜索