為什么應該學習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開發——借助像Anko和Kovenant這樣的框架,Kotlin將在Android開人員中流行。
- IntelliJ對Kotlin提供了良好的支持。 </ul>
Mike的部分觀點與Mark不謀而合。此外,Mike還總結了Kotlin的一些優秀特性,感興趣的讀者可以進一步閱讀。
來自:http://www.infoq.com/cn/news/2015/09/JetBrains-Kotlin-Java