【《快學Scala》筆記】編程
1、基礎數組
一、變量
val 標誌符: 聲明常量; 如,val answer = 1
var 標誌符:聲明變量; app
鼓勵使用val;函數式編程
注:聲明變量時不作初始化會報錯。函數
1 val a:Int = 1 2 val str:String = 2
二、經常使用類型spa
Scala支持7種數值類型和1種Boolean類型。scala
注:全部這些類型都是類,Scala並未區分基本類型與引用類型。如,能夠調用1.toString方法。3d
三、數值類型轉換:code
Scala中使用方法,而非強制類型轉換來作數值類型之間的轉換。如,blog
四、操做符
Scala支持Java中絕大多數操做符,不過全部的操做符都是方法。如:
a+b 是 a.+(b) 的縮寫
即:a 方法 b 是 a.方法(b) 的縮寫,兩種寫法能夠互換。
【注:Scala不支持 ++ 和 -- 操做符。】
五、函數調用和方法
經常使用數學函數包括在scala.math包中,能夠經過以下語句引入包。
1 import scala.math._ // Scala中,字符 _ 是通配符,相似Java中的*
另外,以scala開頭的包,在引入或使用時能夠省略scala。
1 import math._ 2 3 math.sqrt(2)
【注:Scala中沒有靜態方法。】
不帶參數的方法在調用時能夠省略括號,如:
1 "hello World".toString
六、apply方法
在Scala中一般使用相似函數調用的形式來訪問數組、鏈表等的元素。如:
上述調用中,"hello"(0)是"hello".apply(0)的調用。其中apply方法是StringOps類中的方法。
2、控制結構和函數
一、if語句也有返回值
if語句稱爲條件表達式,如:
條件表達式的結構爲: if( 判斷條件 ) 值1 else 值2 ;結構相似於 Java的三目運算符,可是Scala不支持三目運算符。
該條件表達式能夠用來初始化val常量。
注:Scala中每一個表達式都會返回值,如
條件表達式返回了 () ,其中 () 表示Unit類,表示沒有值。能夠看做Java中的void類型。
二、Scala不支持switch語句,可是Scala有更強大的模式匹配機制。
三、塊表達式
Scala中使用 {} 括起來一系列表達式,其 {} 括起來包括 {} 的部分叫作塊表達式,塊表達式的值是塊中的最後一個表達式的值。如,
,結果爲7。
可使用塊表達式爲變量賦值,如:
變量distance使用塊表達式來賦值,其值爲塊中最後一個表達式的值。
四、Scala中賦值語句的返回值爲Unit,也可記做:Scala中賦值語句是沒有返回值的。
【注: x = y = 3; 這種賦值形式在Scala中不支持,由於賦值語句在Scala中無返回值。 因此, += 、-= 、 ×= 、/= 等賦值操做符都是無返回值的。】
五、輸入、輸出
經常使用的包括readLine從控制檯讀取一行輸入,另外,readLine還可帶有提示字符串,如:
readInt、readByte、readDouble、readShort、readLong、readFloat、readBoolean、readChar分別用於讀取各自類型的值。
print(內容)、println(內容)、printf; 其中println帶換行;另外,printf支持C風格的字符串輸出,如:
六、循環操做
Scala支持Java相同的while和do循環:
Scala的for循環結構:( for循環中,變量前面不帶var或val標誌符)
1 for( 變量 <- 表達式 ){ //讓變量遍歷表達式的全部值 2 3 //操做 4 5 }
如:
七、for循環的高級用法
1 for( i <- 1 until 3; j <- 1 until 3 ){ 2 println( i*j ) 3 }
for循環的這種結構相似Java中的嵌套循環結構。
另外,能夠採用
1 for{ i <- 1 until 3 //使用大括號,使用換行來分隔組 2 j <- 1 until 3 }{ 3 4 println( i*j ) 5 }
if表達式是否添加括號,結果無變化。
until 返回一個不包含上界的區間,如 1 until 3 返回 (1,2);
to方法返回一個包含善潔的區間,如 1 to 3 返回(1,2,3);
若是for循環以yield開始,for循環會構造出一個集合,保存到集合中。
八、Scala並不支持break和continue;
九、函數—Scala支持函數式編程
1 def 函數名(參數1:類型1, 參數2:類型2,... ):返回值類型 = { 2 3 //函數體 4 5 }
例如:
【注:對於有返回值的函數,不能省略 等號 ; 對於遞歸函數,不能省略函數返回值類型。】
【注:無返回值的函數定義時能夠省略 等號 ;無返回值的函數返回類型是 Unit;】
十、帶默認值的函數
帶默認值函數的聲明,與Java中的帶默認值的方法很相似。
十一、帶名參數——在函數調用時經過明確指明參數與其對應值
第一個函數調用爲普通調用,第二個函數調用爲帶名參數調用。
十二、長度可變的參數列表
經過在函數的形參列表最後一個參數的類型後,添加*,來定義一個接受任意多個參數的函數。
1三、過程,Scala中將沒有返回值的函數叫作過程,如上圖所示的函數。
過程在定義的時候,參數列表以後無等號。
1四、懶值
但val被聲明爲lazy時,變量的初始化將被延遲,直到咱們首次對變量取值。例如:
1 lazy val fileContent = scala.io.Source.fromFile("filename").mkString
只有當咱們讀取fileContent值時,fileContent纔會經過讀取文件來進行初始化。若咱們一直未讀取fileContent值,這文件不會被讀取。
1五、Scala沒有「受檢」異常——無需聲明函數或方法可能會拋出某種異常。