為什么應該學習Kotlin

jopen 9年前發布 | 14K 次閱讀 Kotlin

Mark Platvoet是一名熱衷于研究新的編程語言、技術和方法的Java和.NET開發者。最近,他為JetBrains推出的新語言Kotlin所吸引,并于近日撰文介紹了這門頗具生產力的語言。

許多語言似乎都是源于對某種其它語言的厭倦。在Mark看來,Kotlin應該也屬于這種情況。不過他覺得,JetBrains的工程師仍然將 Java視為一門優秀的語言。只是,Java太成熟了,改進和增加特性比較困難,因為要保持向后兼容。Kotlin所做的工作就是吸取Java和其它語言的經驗和教訓,并以此為基礎進行改進。

Kotlin處理null的方式是Mark最喜歡的特性之一。以下面的Java方法為例:

public void foo(Bar bar) { /*…*/ } 

對于這樣一個典型的方法,如果傳入的參數為null,那么通常的處理方式是檢查輸入:

public void foo(Bar bar) { 
  if (bar == null) 
    throw IllegalArgumentException(); /*…*/
} 

如果調用該方法時傳入了null,那么它會拋出異常,并提供有用的信息。但這要到運行的時候才能看到。如果方法定義本身就能明確表達不接受null參數的意圖就好了。于是,上述代碼可以進一步改進為:

public void foo(@NotNull Bar bar) { 
  if (bar == null) 
    throw IllegalArgumentException() /*…*/
} 

如此一來,像IntelliJ IDEA這樣的工具在檢測到調用者可能傳入null時就會提醒開發者。這樣的代碼沒錯,但就是有點啰嗦。

Kotlin采用了一種不同的null處理方式。它對可空類型和不可空類型作了區分,可空的類型后面會跟一個問號,比如*Bar?*,而*Bar*類型的變量則不可為空。于是,在Kotlin中,上述Java代碼就變成了下面這樣:

public fun foo(bar : Bar) { /*…*/ } 

Mark認為,Kotlin非常簡潔且富有表現力。這從上面的例子可見一斑。Mark還特別指出,他所說的表現力是指代碼可以明確的表達開發者的意圖,而且有良好的可讀性。

Kotlin的互操作性是Mark提到的另一特性。Kotlin與Java的互操作性非常好。開發者可以直接從Kotlin中調用Java代碼,而且不需要任何外觀模式或其它中間邏輯;從Java調用Kotlin同樣簡單。Kotlin文件和Java文件可以自由混合。即使是現有的Java項目,也可以利用Kotlin,而那些經過嚴格測試的核心代碼可以保持不變。Kotlin運行在JDK 6上,這將使Android開發者可以利用Java近幾年的發展成果,比如Lambda表達式。

無獨有偶。開發者Mike Hearn近日也在Medium上發表了一篇贊美Kotlin的文章,題為《為什么Kotlin是我的下一門編程語言》。Mike非常喜歡Kotlin,在未來5到10年中,他可能都會使用這門語言。Mike根據自己的經驗將Kotlin的優勢總結為如下幾點:

  • Kotlin編譯成JVM字節碼或JavaScript——這不僅會吸引Java開發人員,還會吸引所有使用垃圾收集運行時的開發人員,比如使用Scala、Go、Python、Ruby和JavaScript的開發人員。
  • Kotlin來自業界,而非學術界——它解決了程序員現如今在工作中面臨的問題。
  • 采用成本低——JetBrains提供了高質量的轉換工具(可以實現Java到Kotlin代碼的一鍵轉換),而且特別注重Java二進制兼容性。開發者可以一次僅轉換現有Java項目中的一個文件,整個項目仍然可以正常編譯。
  • Kotlin程序可以使用所有現有的Java框架和庫,并可以集成Maven、Gradle和其它構建系統。
  • 易于學習——Kotlin語法簡潔直觀,看上去非常像Scala,但更簡單。 它不遵循特定的編程哲學,如函數式風格或面向對象風格。
  • 不增加運行時開銷——Kotlin標準庫非常緊湊,主要包含Java標準庫的擴展。
  • 適合Android開發——借助像AnkoKovenant這樣的框架,Kotlin將在Android開人員中流行。
  • IntelliJ對Kotlin提供了良好的支持
  • </ul>

    Mike的部分觀點與Mark不謀而合。此外,Mike還總結了Kotlin的一些優秀特性,感興趣的讀者可以進一步閱讀

    來自:http://www.infoq.com/cn/news/2015/09/JetBrains-Kotlin-Java

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!