1. 程式人生 > >半小時快速上手Scala

半小時快速上手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的世界。

(未完,待續)