為什么要學習Scala
為什么還需要一個新的語言呢?我們希望程序更簡潔,更易讀,更不容易出錯,充分利用現代處理器的多核特性,可以相對容易地實現分布式應用。
專家推薦
Groovy創始人James Strachan曾經說過:
我認為將來可能替代Java的就是Scala 。它實在太讓我印象深刻了。我甚至可以誠實地說,如果有人在2003年把那本《Programming in Scala》拿給我看了的話,那我根本就不會再去發明Groovy了。
JavaOne會議期間,在一個參加的講座中有人向Java之父James Gosling提了一個有意思的問題:
除了Java之外,你現在還使用JVM上的那些語言?"
Java之父的回答很迅速同時也很讓人意外
Scala
編程范式
Scala和其他很多語言根本的區別就是它融合了面向對象和函數式編程這兩種編程范式。
Scala是一個面向對象的。和Java有primitive type不同,Scala所有東西都是對象。你可以使用所有熟悉的面向對象的編程范式和和模式。不僅如此,Scala對于面向對象有不少創新的貢獻。例如Scala中特質(trait)的概念。它類似于Java中的接口(Interface),但是可以具有方法實現和字段。一個對象可以混入(mixin)多個特質。它比多繼承(比如C++) 更加靈活,同時也沒有多繼承中二義性的問題。
Scala是函數式的。函數式編程不是一個新的概念,50年代的Lisp就是函數式編程的始祖。此后,又有Scheme,Haskell,F#等后來者。但是函數式編程一直十分小眾,直到最近幾年才突然流行。下面簡單介紹一下函數式編程的基本概念,和其流行的原因。
在函數式編程中,函數是一等公民。和int,string一樣,你可以將函數作為參數傳遞給另一個函數,將函數作為返回值。這樣做的一個好處是程序更加簡潔易讀。另外,函數可以事先定義,稍后觸發。這也是目前最為流行的事件驅動(event driven)或者反應式(reactive)編程的基本應用場景。
在函數式編程中,數據的操作是將輸入映射為輸出,而不改變任何輸入。這樣immutable的方法杜絕了side effect。如果你讀過Effective Java,應該記得很多地方討論過immutable的好處。在函數式編程的世界里,immutablity是默認的。當然,很多時候這樣的方式會帶來數據的拷貝和浪費。然而,隨著計算和存儲能力的不斷提高,immutable編程的優勢會逐步凸顯。此外,和一些純函數的語言不同,Scala也允許mutable的值,使得編程十分靈活。
具體特性
Scala可以和Java很好的銜接。Scala可以使用所有的Java庫,同時對于一些Java類做了無縫的擴展。例如你可以使用str.toInt而不是Integer.parseInt(str)。
Scala更加簡潔。一個方面它盡量避免使用Java中的重復代碼,比如無窮無盡的get和set。另一方面,豐富的庫函數和函數式編程的結合,使得很多操作的實現異常簡練。比如,要檢驗一個名字中是否含有大寫字母,只需要一行代碼
val?nameHasUpperCase?=?name.exists(_.isUpper)
Scala是靜態類型的語言。具備所有靜態類型的優勢如編譯時類型檢查,安全重構,代碼即文檔。另一方便,Scala同時在你不給出類型時,可以“聰明”地猜測類型。一定程度上具備動態類型語言的靈活性。
應用趨勢
Scala是個通用的編程語言。目前其Web Framework Play已經在很多企業得到應用。Scala的Akka也被不少企業應用于大型分布式應用的開發。大數據領域的新星Spark就是用Scala編寫的。Twitter內部應用大量使用Scala。在國內,使用Scala的公司還不是很多。但可以預見,Scala將會越來越流行。雖然Java 8的一些新特性和Scala很相似,但也有它的局限。這一點,我以后會詳細講解。
不可否認,Scala的學習曲線相對比較陡。往往有很多方法來解決一個問題。如果沒有充分理解和合理使用,Scala編寫的程序也會不倫不類。我希望通過一個系列,由淺入深,來講解Scala。
https://www.jianshu.com/p/9cb4795b8e86
Scala Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。