Scala 是新一代的 JVM 語言,作為最普及程式語言之一 Java 的替代選擇,正逐漸贏得用戶青睞。雖然 Scala 的普及度尚不及 Java,但正在逐步地迎頭趕上。有越來越多 Java 開發者學起 Scala,受到 Twitter 的影響,有越來越多公司開始使用 Scala,其前景看來可期。
首先,Scala 有許多地方與 Java 不同,但同時兩者又有許多相似之處,例如說 Scala 與 Java 都是基於 JVM 的語言。你可以用寫 Java 的方式寫 Scala,Scala 也可以使用所有的 Java 程式庫,我認為 Scala 設計者在此做了很棒的決定。因為在 Java 方面已經有龐大的開放源碼框架與程式庫可用,最好的做法是重複使用這些作品,而不是用 Scala 重新打造一份。
在許多差異中,Scala 與 Java 主要不同之處其中之一,是能運用函數式程式設計典範以及當代 CPU 的多核心架構。由於目前 CPU 的發展趨勢傾向增加更多核心,而非提高 CPU 時脈週期,這也有利於函數式程式設計模式。不過,當 Java 8 一旦加入 lambdas 之後,這項差異或許就此不在,但對此發表評論還嫌太早。除了函數式程式設計之外,兩者還有許多差異。其中很明顯的是可讀性的提高與程式碼的簡潔性。Java 常因為太過冗長而遭到批評,Scala 的確考慮到這一點,通常 5 到 6 行的 Java 程式,只需用 2 到 3 行 Scala 就能表達。在本文中,將介紹 Scala 與 Java 間的相似與差異之處。
Scala 與 Java 的相似點
以下是 Scala 與 Java 程式語言的某些主要相似處:
Scala 與 Java 的不同處
// 影像載入很慢,所以只在需要秀圖時才載入 lazy val images = getImages() //用 lazy 關鍵字啓用惰性運算 if(viewProfile){ showImages(images) } else(editProfile){ showImages(images) showEditor() } else{ // 其他不需要載入影像的事 }
如果你喜歡從實例中學習,那麼我猜 Scala CookBook 會是你另一個不錯的選擇,其中針對 Scala 的不同功能,包含了數不清的範例。
Java: List<Integer> iList = Arrays.asList(2, 7, 9, 8, 10); List<Integer> iDoubled = new ArrayList<Integer>(); for(Integer number: iList){ if(number % 2 == 0){ iDoubled.add(number 2); } } Scala: val iList = List(2, 7, 9, 8, 10); val iDoubled = iList.filter(_ % 2 == 0).map(_ 2)
你可以看到 Scala 的版本比 Java 簡潔許多。當你開始學習函數式程式設計的概念和模式,你會看到更多這樣的例子。我迫不及待想看到 John Hunt 的 Scala Design Patterns: Patterns for Practical Reuse and Design,這本書雖然尚未發行還在預訂階段,但這個月應該就會發行。
雖然 Scala 與 Java 是兩個不同的程式語言,但彼此有許多共通點,這並非壞事,而且正是這點讓 Scala 可能成為 Java 的替代選擇。正如我在學習 Java 程式設計的 10 個理由 (10 reason to learn Java programming) 這篇文章中提到,Java 工具、程式庫、社群,是該語言的最大優勢,假如 Scala 能加以利用的話,將能夠大幅超前。對於 Java 程式設計者,我覺得學 Scala 沒什麼壞處,你可以會學到一些好的做法,甚至可以應用到 Java 上。由於企業部門仍舊以 Java 為主,Scala 還處於初期階段,如果你現在學 Scala 的話,可以搶先一步。總結來說,Scala 看來很有潛力,所有的設計決策都很不錯,在歷經 Java 多年經驗後。
給 Java 程式設計者的 Scala 推薦書籍
書是學習新程式語言的最佳途徑,首先它們以更具可讀性與權威的方式,呈現了完整的資訊。我強烈建議在投入部落格與線上文件前,先至少看一本書。鑒於 Scala 陡峭的學習曲線,讀 Scala 程式設計書籍以打好基礎是絕對必要的。你可以從以下我列出的書中挑選一本。
Programming in Scala: A Comprehensive Step-by-Step Guide,第二版,作者 Martin Odersky、Lex Spoon 與 Bill Venners
Scala for the Impatient,作者 Cay S. Horstmann
Scala in Depth,作者 Joshua D. Suereth 與 Martin Odersky
◎本文翻譯自 Java Revisited:
https://javarevisited.blogspot.tw/2013/11/scala-vs-java-differences-similarities-books.html
Comments
>
有漏字?
有人會說 Java 的可讀性比 Scala 高,.....