認(rèn)識Scala
- 同樣是以JVM環(huán)境運(yùn)行
- Scala語言底層就是Java
Scala命令行學(xué)習(xí)語法
-
整數(shù)相加
res0是scala中的shell給出的一個(gè)默認(rèn)的變量名稱,用來存儲這個(gè)結(jié)果的,冒號后面即為這個(gè)結(jié)果的類型。
-
輸出文本
println是scala預(yù)定義導(dǎo)入的類。
- 寫helloworld程序
// object表示這是一個(gè)單例對象
object HelloWorld {
// args為參數(shù)名,Array[String]參數(shù)類型
def main(args: Array[String]) = {
print("Hello world!")
}
}
-
定義變量
val定義的變量,表示這個(gè)變量的值是不可更改的,第一個(gè)是沒有明確指定變量類型,scala會自己推斷;第二個(gè)是明確指定變量類型的。
var關(guān)鍵字定義的變量是可以更改的。
在用val關(guān)鍵字前面加上lazy關(guān)鍵字,可以讓這個(gè)變量變成懶加載,執(zhí)行這條語句的時(shí)候不會讀取值,只會聲明這個(gè)變量,只有真正要使用到這個(gè)變量的時(shí)候,才會讀取值。
-
數(shù)據(jù)類型
和java類似的有,Byte Short Int Long Char String Float Double Boolean。只是每個(gè)類型的首字母都是大寫。還有幾個(gè)特別的類型Unit(可以看作void),Any類型(是所有類型的超類),Null,Nothing(表示沒有值)
類型關(guān)系圖 -
函數(shù)定義
從左往右一次是:def關(guān)鍵字,函數(shù)名,參數(shù)列表,返回值類型,最后是函數(shù)體。參數(shù)列表可以省略,當(dāng)參數(shù)列表省略時(shí),調(diào)用函數(shù)可以不加最后的左右小括號。返回值類型和等號也可以省略(省略后返回值為Unit類型)。 函數(shù)體最后一條語句的值即為函數(shù)返回值,scala中沒有return關(guān)鍵字。各個(gè)語句也不要用 ; 作為行結(jié)束符
-
匿名函數(shù)
-
為函數(shù)指定默認(rèn)參數(shù)
-
為函數(shù)指定變長參數(shù)
-
控制語句if
if表達(dá)式本身就是有值的,比如上面這個(gè)表達(dá)式的值就是“yes”;
和函數(shù)類似,最后一個(gè)語句就是表達(dá)式的返回值;
如果兩種情況的返回值得類型不相同,會被轉(zhuǎn)化成Any類型
上面兩種寫法是相同的,省略else時(shí)就是指else返回 "()" ,"()"就是空的語句塊,其類型就是Unit。 - 循環(huán)語句while和do while
scala的while循環(huán)語句和java類似,但是scala不支持break和continue語句 -
循環(huán)語句for
1 to 10可以看作為 1.to(10)。返回的是一個(gè)可以迭代的序列
1 until 10和1 to 10類似,但是不包括10。還可以用Range(1,10)來代替1 until 10
還可以迭代一個(gè)字符串
for循環(huán)中使用yield會把當(dāng)前的值記錄下來,保存到一個(gè)索引序列中,當(dāng)循環(huán)結(jié)束,就會返回這個(gè)序列q
可以在迭代序列的時(shí)候,添加if語句判斷,只迭代滿足if條件的。 -
雙層循環(huán)實(shí)現(xiàn)乘法表(雙層循環(huán))
-
數(shù)組Array(長度固定)
定義數(shù)組。當(dāng)數(shù)組中的每個(gè)元素類型不相同時(shí),則會取公共的父類型。
訪問數(shù)組,用圓括號下標(biāo)從0訪問。
-
數(shù)組ArrayBuffer(長度不固定)
定義buffer數(shù)組,首選需要導(dǎo)入包(import scala.collection.mutable.ArrayBuffer)
對buffer數(shù)組添加一個(gè)元素
對buffer一次性添加多個(gè)元素
ArrayBuffer有很多方法:insert、remove、trimEnd等等,可以方便的對數(shù)組進(jìn)行操作 -
Array和ArrayBuffer之間的相互轉(zhuǎn)換
Array轉(zhuǎn)化為ArrayBuffer類型:
ArrayBuffer類型轉(zhuǎn)化為Array類型:
-
迭代數(shù)組
-
不可變集合(多個(gè)<key,value>組成)
-
可變集合。注意:由于這個(gè)Map只是一個(gè)抽象類,要創(chuàng)建空的Map,必須要用實(shí)現(xiàn)類HashMap去創(chuàng)建。
判斷集合中是否存在某一個(gè)鍵值對,兩種相同的方式。
-
對集合排序
按照key排序
按照插入元素的順序排序,可以使用LinkedHashMap集合類
-
元組
































