groovy, Scala和kotlin區別




所謂Scala的目的是什么?事實上Scala作者Martin Odesky他在《Programming in Scala》中寫到,Scala的目的是為了更好的融合OO與FP,確實,不是取代Java。而且打造一個更偉大的JVM語言。和干掉Java半點關系都沒有。作者只是想搞一個可以伸縮的JVM語言。不過Scala確實在很多方面引領了JVM語言的潮流。同時強大的類型系統讓Scala的表達能力和抽象能力比Java,Kotlin都強。這讓Scala非常實現寫類庫和框架。如Spark和Akka。然而Scala為了伸縮性和表達能力犧牲了易用性,所以寫應用Scala就太重了。比如把Scala用戶分為應用程序開發人員和類庫設計人員,然后在歸納出他們要掌握的東西。你就發現哪來寫應用的話Scala的很多特性都用不上。這就是為什么有Kotlin。

Kotlin是想干掉Java。眾所周知Scala用戶里有Better Java派和Pure-FP派。Kotlin在很多地方就是學習了Scala的語法,比如說data class和類構造器的設計,在Scala中都可以找到類似的東西。同時有加了不少語法糖,比如getter和setter,委托的語法糖,解決了Java沒有這方面語法的缺點。雖然說抽象能力和類型系統比Scala差很多。但是吸引了Better Java派的目光。畢竟Kotlin的目的就是在JVM上建立一個有C#的易用性,Scala的語法精簡,Java的生態的語言,要是你覺得Java語法太垃圾干嘛不用呢?總體再說,Kotlin的目的就打造Better Java,打造新一代的JVM語言(這個新一代和Scala不一樣,Scala是強調類型系統的改良和伸縮性。Kotlin是語法糖)。如上文所提到,Scala的高級特性比如類型投影,存在類型,高階類型這些拿來開發應用基本沒什么用。所以有了Kotlin,Kotlin的類型系統就是Java類型系統的延續。但是哪來開發類庫Kotlin的抽象能力就不夠用了。看看Arrow.kt就知道Kotlin實現各種代數上的抽象結構有多難。

而Pure-FP派的Scala用戶因為是Scala類型系統的重度用戶,沒有高級的類型就寫不出來了,所以就繼續用Scala。

Groovy的目的就是為了開發一個JVM上的腳本語言。靈活性比Scala還強。Groov亮點就是寫DSL很方便,比如Gradle的build script。Groovy的優缺點和其他腳本語言比如Ruby差不多。我覺得Groovy就是一個JVM上的Ruby++。和Ruby一樣靈活,一樣可以寫DSL。但是Groovy能搞的Scala大部分都做的出來,搞DSL的話Scala也行,只是不那么方便。

Clojure就是JVM上的Lisp。解決的Java語法和Lisp差別太大的缺點。當然,Clojure還是很強的,有Marcos,而且比Scala的Marcos強,可以玩meta programming。所以拿Clojure造DSL比Groovy還方便。

總體來說,Scala解決的Java的類型系統不夠強大,抽象能力不足的缺點。Kotlin解決Java語法糖不夠多的缺點,Groovy解決了Java太死板的缺點,Clojure要解決和和Groovy差不多,只是靠Lisp化做得更徹底一點。

所以要是你要選語言,可以看這個

  • 寫腳本 => Groovy
  • 元編程,玩 => Clojure
  • Android,干各種Java適合干的事情(如后端) => Kotlin
  • 開發類庫,玩函數式編程,數據分析,一些微服務(如Akka)=> Scala


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM