scala函數式編程

 結構
 學會使用Scala中主要的結構控制語句
 數組
 學會數組的聲明與使用
 映射
 瞭解Scala中的映射的基礎知識
 包與引用
Scala控制結構
 判斷(if表達式)
 循環(while/do語句)
 枚舉(for表達式)
 匹配(match表達式)
 異常處理(throw/try)
 輸出(print/println)
 輸入(readLine)
判斷(if表達式)
 檢測語句是否爲真,並執行以後的語句
 if(A) B ; else C (「 ;」號能省略嗎?)
 A能夠是任意返回布爾值的語句,或是布爾值的量,真則執行B,假則執行C;
 當B爲空時,可寫成 if(!A) C
 def min(x:Int,y:Int):Int={
var a=x
if(x>y) a=y
return a
}
 if表達式能用以賦值
 def min(x:Int,y:Int)= if(x>y) y else x


循環(while/do)
 while語句包括狀態判斷與循環體,只要當前狀態判斷爲真,就執行循環體一遍;而後
進行下一次狀態判斷,判斷爲假時終止循環。
 while(A) B
 do語句與while相反,先執行循環體一遍,而後進行狀態判斷,狀態判斷爲真,則繼續
執行循環體,不然終止循環。
 do B while(A)
 m -= 1 m=m-1; m+=1 m=m+1
 var m=3 var m=3
 while(m!=0){ do{
 println(m) println(m)
 m-=1 m-=1
 } }while(m!=0)


枚舉(for表達式)
 For表達式能用任意條件進行各類形式枚舉,而在枚舉的過程當中能實現絕大部分的循環
功能且沒必要使用變量。
 for(i <- e) E(i)
 for表達式包括髮生器(i <- e)同函數體E(i),
 發生器是遍歷e中的元素,每一次枚舉名爲i的新的val就被初始化
 對於每一次枚舉,函數體E(i)都會執行一次,而其中的參數i由枚舉時進行賦值
 e能夠是各類集合,包括數組、列、表達式等,或是有上下界的數值範圍:
 1 to 4 (1=<i<=4);1 until 4 (1=<i<=4-1)(不包含上界)
 for(i <- 1 to 4)
println(「No.」+ i)


枚舉(for表達式)
 在for語句中使用if語句進行過濾
 for(i <- e) if(A) E(i)
 for(i <- 1 to 4)
 if(i%2==0)
 println(「No.」+ i)
 for語句中能使用多個if語句進行過濾,if語句間不用「 ;」 間隔
 for(i <- 1 to 4)
 if(i%2==0)
 if(i!=2)
 println(「No.」+ i)
 能把if語句寫入循環體,而非函數體中,此時要使用「;」 間隔
 for(i <- 1 to 4;if i%2==0;if i!=2)println(「No.」+i)


枚舉(for表達式)
 for語句實現嵌套枚舉只須要多加一個<-字句
 for(i <- 𝑒1)for(j <- 𝑒2)E(i,j)
 for(i <- 𝑒1;j <- 𝑒2)E(i,j)
 for(i <- 𝑒1;if A;j <- 𝑒2;if B)E(i,j)
 嵌套枚舉並不是是同時進行的枚舉;形如for(i <- 1 to 4;j <- 1 to 2),其枚舉形式是,先
枚舉i = 1,再完整枚舉j = 1,j = 2;而後是枚舉i =2,再完整枚舉j = 1,j =2
 循環體的<-語句順序是影響循環結構
 出於理解和閱讀要求,對於較長的循環體或者函數體,能夠進行分行


枚舉(for表達式)
 for語句除了對枚舉值進行操做並釋放該值外,能夠用以賦值,即把每一次枚舉的值記
錄在集合中。
 for(i <- e) yield E(i)
 若E(i)由花括號括起,yield須在花括號外,即for(i <- e) yield {E(i)}
 val No=
for(i <- 1 to 4)
yield i
yield保留字返回的類型跟for循環體第一個<-語句的集合類型相同,如非集合時,返回
的是序列


枚舉(for表達式)
 for(i <- 「HELLO」)yield i
 for(i <- 1 to 2)yield i.toChar
 for(i <- 「HELLO」;j <- 1 to 2) yield (i+j).toChar
 for(i <- 1 to 2;j <- 「HELLO」) yield (i+j).toChar
 分別返回什麼結果呢?
 String:HELLO
 Vector<?,?>
 String:IJFGMNMNPQ
 Vector<I,J,F,G,M,N,M,N,P,Q>

匹配 (match表達式)
匹配 (match表達式)
 匹配語句case後接 _ 表明的是任意,通常在最後的case語句中這麼寫,即匹配不到上
面的值時,執行
 如 a match {
case e1 =>...
case e2 =>...
case _ =>....}
 匹配語句返回的值有多種類型時,Scala不能執行類型推斷,而且只會返回Any類型
 如 val final=a match {
case e1 => 「HI」
case e2 => ‘H’
case e3 => 123 }


異常處理(throw/try)
 Scala處理異常通常經過throw拋出一個異常並停止
 要麼捕獲並處理該異常,要麼簡單停止之
 異常拋出:throw new IllegalArgumentException
 異常捕獲與處理:try{函數體} catch{case…;case…}
 異常捕獲並停止:try{函數體} finally{A.close()}
 try{函數體} catch{case…;case…} finally{A.close()}
 throw、 try-catch-finally表達式都能生成值
 如:throw new IllegalArgumentException(「Error!」)
 def f():Int=try{1} finally{2}


輸入輸出
 輸出一般使用print或println函數,後者在輸出內容後追加一個換行符
 println(A) A能夠是值、表達式等,如:
 println(「A」) println(「A」+1)
 當A是表達式時,輸出的是表達式的運行結果
 輸入一般使用read函數,如readLine是從控制檯讀取一行輸入,指定類型時爲readT
,T是所要指定的類型,如readInt等
 val name=readLine(「 Your name :\n」 ) readLine帶一個參數做爲提示字符串
 val age=readInt()

其餘語句
 return 語句表示返回某個值,可是Scala事實上無須使用return語句
 對於函數來講,其默認返回值是最後出現的一個值,不用特別註明。如須要返回的值
並不是最後出現時,可在函數體後加上該值的標識符使之「出現」
 聲明函數時使用return語句,必須聲明返回值的類型,如def abd():T={return}
 break/continue在C++中很是常見的控制結構語句,但在Scala中是沒必要要的,能夠
使用布爾值類型的量經過IF語句進行控制數組

相關文章
相關標籤/搜索