在 2017 Google I/O 大會的 Keynote 演講中,我們了解到,Kotlin 編程語言將在 Android 上正式受到官方支持。消息一出,世界各地開發人員紛紛擊掌歡呼——很多人認為 Java 即將會被取而代之(老實說,我依然是 Java 的愛好者)。
對 Kotlin 的炒作是否合情合理呢?其實這也相當于 Swift 語言的發展,令人興奮的同時也有因這門語言并不成熟,所以很多開發者并沒有使用它。
兩年前我曾發誓倘若 Google 不支持它,我也不會開始認真學習 Kotlin。既然現在已經做了支持,那么我也有理由繼續深入學習。
為了能快速學習這門新語言,我基于已有的開發技能并利用熟悉的語言(Java 和 Scala)來學習 Kotlin。
當閱讀 Kotlin 文檔時,我注意到的個地方是它能編譯字節碼、JavaScript、Native、而且它是由 Jetbrains 開發的。下面讓我們一起來攻克這門語言吧。
如果 Kotlin 編譯為字節碼,則意味著它在運行時使用 JVM(Java虛擬機)將字節碼編譯為機器碼。
那么 JavaScript 呢? 事實上,它使用目標 ECMAScript 5.1 將 Kotlin 代碼轉換為 JavaScript。 雖然我不是 JavaScript 專家,但是可以查看官方文檔以獲取更多詳細信息。
Kotlin 的一個厲害的特性在于能夠編譯原生,并支持更多沒有 JVM 的平臺 - 現在,Kotlin Native 可以在 Mac OS、Linux、Raspberry Pi 和 iOS(通過在 Mac 上交叉編譯)上使用 LLVM 生成可執行文件。 Windows 平臺尚不支持,但他們正在開發中。
我夢想的場景是:用 Kotlin Native 開發 Android 和 iOS 應用程序的所有業務邏輯,然后用特定平臺語言(Android = Java / Kotlin,iOS = Objective-C / Swift)開發 UI。 Kotlin Native 仍然未成熟,所以在它成熟之前我必須等。
另一個人們比較關注重視的問題:
Kotlin 與 Java 能 100% 兼容嗎?
查看官網就能知道答案:
這就是我此刻的反應:
但在我們真正深入了解這個特性之前,還有更多的細節值得我們去探索。
如果閱讀過關于 Kotlin 的文章,也會了解到它的特性:
不變性
代碼量比 Java 少
空指針安全性
功能編程性
下面我們詳細分析一下這些特點。
與具有功能編程概念的所有語言一樣,不可變性是主要的討論要點之一。 那么在 Kotlin 中它是如何工作?
變量可以是:
可變的:由關鍵字 var 表示;
不變的:由關鍵字 val 表示。
關鍵字 val 真的不可變嗎?
不。當定義真正不可變的變量時,我們總是需要檢查它是否滿足兩種不可變:
不可變的引用:一旦分配了引用,它就不能被分配給其它的引用。
不可變值:引用的值不能被改變。
那么 Kotlin 有不可變的 collection 嗎?
是的,它的確有。
你可以在不可變的 collection、map、set 等之間進行選擇,因為該語言具有兩種實現。如下所示:
Kotlin 有只保存數據的數據類,所以寫所有 POJO 類可以用一種簡潔的方式。
Java 代碼:
Kotlin 代碼:
好的,此刻你肯定在想:為什么你使用 var(可變的)而不使用 val(不可變的)呢?
這是因為 Java 中 Foo 類從一開始就設置為可變。
在 Kotlin 擴展中可以找到另一種編寫較少代碼的方法。其允許你在不修改源代碼的情況下向類中添加方法/函數——告別使用 Utils 類。 Kotlin 團隊已經使用了擴展的 JDK 類,如文件、IO 和線程。
以下是標準庫的示例:
如果使用 Java 開發,那么在某些情況下,必須處理NPE(Null Pointer Exception),當忘記檢查變量是否為 null 或者你沒有預料到會有一個空值變量時,它會彈出 NPE。
Kotlin 對此有一個聰明的解決方法:默認情況下使所有類型不可為空。因此,編譯器不會讓你使用未初始化或不可空變量。但是通過運算符“?”你仍然可以使用可空類型。
以下是幾個案例:
你可能會認為,不可為空的類型并不總是會被使用,因為有時它不在控制范圍內,例如網絡響應問題。
別擔心,Kotlin 包含一個“Elvis 操作符”,通過這個簡單的操作符“?”就可以表達典型的 if else null :
所以告別 if else 表達式。
后一個關鍵是,你可以像 “?”一樣使用 “!!” 操作符。它們區別在哪里?如果變量為 null,它將拋出一個NullPointerException,所以請避免使用它!
這個話題對我來說特別重要,因為我所有在 Android 及后端開發中都是用 Java 編寫的。我也為此感到驕傲,所以我現在不想改變他們。
如前面所述,Kotlin 與 Java 是 100% 兼容的。
以下是使用 GSON 和 Retrofit 的一些示例:
在 Mobile Jazz,我們開發了 Bugfender 作為 iOS 和 Android 應用程序的遠程日志記錄服務。 Android SDK 完全由 Java 開發。 Kotlin 同樣可以開發——它可以在 Kotlin Android 應用程序中使用,因為與 Java 可互操作。點擊這里查看一個例子。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。