半小時快速上手Scala
本文總結Scala在語法上的新特性,以達到看得懂Scala程式的地步(Scala有些寫法確實是比較騷氣~)。
Scala的語法之所以顯得騷氣,是因為它的某些關鍵字或者運算子我們不認識,看起來更接近人類語法,比較隨意不固定。
當我們學習的語言多了之後,就會有比較廣闊的見識,當然也會有門戶之見,對某些新語言的某些語法嗤之以鼻。但是,新語言(像Scala、Go)的出現,帶給我們的知識衝擊,一定是一件好事!一些我們想都不敢想的特性(比如goroutine)在語言層面被支援了,極大地提高了我們的生產效率,這才是符合歷史發展規律的!以前我們只知道“應該這樣”,現在知道了“居然還可以這樣”。
和Go比較的話,Go更像是C/C++的後裔,Scala顯然是Java的後裔。不過它們都有一個特點,就是更輕量化
一門語言要能用,必然要有幾個核心的API庫,用於完成字串操作、檔案操作、網路操作、資料結構與演算法等基礎功能,比如:C語言的GLIBC,C++的STL,Go也有。Scala呢?Scala可以呼叫Java的庫!這個。。。看到這裡,我都已經不太想介紹Scala了。只能說,Scala註定不能成長為一門獨立的語言。我們也要反思一下,學習Scala的目的是什麼?僅僅是為了Spark嗎?
1. 左箭頭 <-
2. 陣列
var myList = Array(1.9, 2.9, 3.4, 3.5); //用var作為變數的資料型別,一下就讓人想起被javascript支配的恐懼
3. 多維陣列(不妨稱為矩陣)
var myMatrix = ofDim[Int](3, 3)
for (i <- 0 to 10) {
for (j <- 0 to 10) {
myMatrix(i)(j) = j;
}
}
能夠支援矩陣,這就牛B大了,註定它非常適合用於大資料處理。
4. 陣列運算--合併
var myList1 = Array(1.9, 2.9, 3.4, 3.5)
var myList2 = Array(8.9, 7.9, 0.4, 1.5)
var myList3 = concat(myList1, myList2)
5. 右箭頭 ->
val x = Map("one" -> 1, "two" -> 2, "three" -> 3)
"->"是key和value之間的連線符。
6. 資料型別放在後面
var myVar : String = "foo"
評論:這是跟Go學的吧!C語言老人家好想把它懟到前面去!
7. 使用+號連線字串
評論:幹得漂亮!和Python一樣,很自然。
8. 特殊的返回值型別Unit
評論:不明所以,叫void不就好了?Scala作者想裝個B?
9. 不帶括號的函式
【總結】
1. 對於不熟悉Java的程式設計師,單獨學習Scala是沒有意義的。更好的方式是,藉由Scala這個殼進入Java的世界。
(未完,待續)