谷歌今天宣佈,Kotlin 程式語言現在是 Android 應用程式開發人員的首選語言。
谷歌在今天的宣告中寫道:“Android 的開發將越來越以 Kotlin 為先。”許多新的 Jetpack API 和特性將首先在 Kotlin 中提供。如果你要開始一個新專案,你應該用 Kotlin 來寫;用 Kotlin 編寫通常意味著更少的程式碼——更少用於型別、測試和維護方面的程式碼。”
就在兩年前的 2017 年 I/O 大會上,谷歌宣佈在其 Android Studio IDE 中支援 Kotlin。考慮到 Java 長期以來一直是 Android 應用程式開發的首選語言,這有點令人驚訝。在過去的兩年裡,Kotlin 的人氣只增不減。谷歌說,超過 50%的專業 Android 開發人員現在使用該語言開發他們的應用程式,在最新的 Stack Overflow 開發人員調查中,它被列為第四大最受歡迎的程式語言。
Android 的首席倡導者切特·哈斯(Chet Haase)表示:“我們宣佈,我們正在採取的下一個重大舉措是,我們將以 Kotlin 為先。”
哈斯說:“我們知道,不是每個人現在都在用 Kotlin,但是我們相信,你會需要它的。”“你可能有充分的理由繼續使用 C++和 Java 程式語言,這完全沒問題。這些語言不會消失。”
Kotlin,Android 世界的 Swift?早在 2015 年,Kotlin 就有“Android 世界的 Swift ”的稱號。
Kotlin 是一門與 Swift 類似的靜態型別 JVM 語言,由 JetBrains 設計開發並開源。與 Java 相比,Kotlin 的語法更簡潔、更具表達性,而且提供了更多的特性,比如,高階函式、運算子過載、字串模板。它與 Java 高度可互操作,可以同時用在一個專案中。
按照 JetBrains 的說法,根據他們多年的 Java 平臺開發經驗,他們認為 Java 程式語言有一定的侷限性和問題,而且由於需要向後相容,它們不可能或很難得到解決。因此,他們建立了 Kotlin 專案,主要目標是:
建立一種相容 Java 的語言編譯速度至少同 Java 一樣快比 Java 更安全比 Java 更簡潔比最成熟的競爭者 Scala 還簡單若在當時看來,Android 世界的 Swift 稱號似乎底氣不足,更像是一種美好的願望。那麼在 2017、2019 兩屆的 Google I/O 以後,這個說法可以站住腳了。
Kotlin 真比 Java 強?許多新語言的出現似乎都是源於對某種其它語言的厭倦。似乎 Kotlin 也是如此。但在 JetBrains 看來,Kotlin 專案的原始動機就是為了提升生產力。JetBrains 開發者支援組組長 Hadi Hariri 在接受 InfoQ 採訪時表示:
”儘管當時我們已經開發了對幾種基於 JVM 的程式語言的支援,我們還是基本都在 Java 環境下寫基於 IntelliJ 的 API。IntelliJ 開發系統是基於 Groovy 和 Gant 的,Groovy 也用於測試,RubyMine 中還有一些 JRuby 程式碼,情況就是如此。我們希望轉向更具表現力的語言從而提高生產力。同時,我們不能接受在 Java 互操作性或編譯速度方面的妥協。“
Kotlin 與 Java 總是在主觀比較“Kotlin 比 Java 好”,“Kotlin 可讀性比 Java 強”,“Kotlin 開發速度比 Java 快”,類似這樣的陳述缺少相關準確資料的支援,所以都歸為主觀看法一類。
主觀看法是個體開發人員在對與 Kotlin 或 Java 相關的主題作出一個或多個主觀判斷時形成。
開發人員的主觀判斷存在如下問題:
沒有與主觀判斷相關聯的量化指標。主觀判斷存在很大的偏見。主觀判斷的偏見在開發人員之間存在很大的差異。由於沒有與主觀判斷相關聯的量化指標,建立在這些判斷基礎上的觀點只是反映出了開發人員之前就有的偏見。不同的開發人員可能有著截然不同的偏見,因此,有開發人員認為 Kotlin 是不錯(或糟糕)的 Java 替代者並不意味著其他開發人員也這麼認為。
而且,由於沒有客觀指標,主觀分歧就無法客觀地消除,這經常會導致“口水戰”。
相較於 Java,Kotlin 的確在一些方面有較大優勢:效率高、易維護、可靠、簡單易學。在一些特定場景下,許多 Java 開發者因為某些方面的問題選擇了切換到 Kotlin:比如受夠了 Java NullPointerException 的人都喜歡 Kotlin 的 Null 安全特性;擴充套件函式被大量使用;除了擴充套件 Java 類,人們也常常將 Java 程式碼遷移到 Kotlin。
根據英國軟體公司 Pusher 調查的資料顯示,在樣本數 2744 人的調查中,超過 87% 的受調者已經完成了遷移。他們有的使用了遷移向導,有的直接手動修改程式碼。超過四分之一的受調者遷移到 Kotlin 後又回到了 Java。有技術方面的原因,也有組織方面的原因。其中使用了反射或程式碼生成的工具是被提及最多的因素。
“Kotlin 的列舉不能包含常量。在自定義註解時(比如 @IntDef),為了保持介面的整潔,需要將值儲存在列舉中。”“我們正在使用 Realm,但它不能與資料類一起使用。”“我們的 Java 程式碼中使用了 Retrolambda,因為型別缺失,很難轉到 Kotlin。”“另一個團隊不喜歡 Kotlin,我們也預料不到會這樣。”“這不是我們決定的,我們是按照公司的規則來的。”Java 依舊是程式語言排行榜上的第一名。但 Java 是最好的語言麼?不是,因為在每個領域都有更合適的程式語言。
那麼,Java 語言到底有什麼優勢可以佔據排行榜第一的位置呢?
其一,語法比較簡單,學過計算機程式設計的開發者都能快速上手。其二,在若干了領域都有很強的競爭力,比如服務端程式設計,高效能網路程式,企業軟體事務處理,分散式計算,Android 移動終端應用開發等等。最重要的一點是符合工程學的需求,成為企業軟體公司的首選,也受到網際網路公司的青睞。綜合而言,Java 語言全能方面是最好的。但同樣可以看到,Android 社群擁抱 Kotlin 的速度越來越快,也許有一天,在 Android 世界裡,我們會看到 Kotlin 對 Java 的超越。
為什麼谷歌會支援 Kotlin?那 9 行程式碼造成抄襲的緣由據說是因為當時谷歌的一位工程師在為 Android 專案工作的同時,又為 Sun 公司的 OpenJDK 效力,後來,該工程師直接從 OpenJDK 中複製了 9 行程式碼到 Android 中,由於 Google 沒有得到 Sun 公司的授權,所以 Oracle 收購 Sun 之後,Java 易主,這就相當於侵犯了 Oracle 的版權。
而對於那 37 個 Java APIs,雙方各執己見,谷歌認為 API 不應受版權保護,而 Oracle 則認為 谷歌對其的使用具有很強的商業性,再加上用 Java 寫的 Android 程式碼無法在 JVM 上執行,這對 Java 語言是一種分裂,同時 Oracle 認為,Android 透過不當使用 Java API 擠佔了 Java ME 可能的市場,這是它鉅額索賠的根基。
2016 年初,Google 發言人表示,Android N(7.0) 不再沿用現有的 Java APIs 內容,而是遷移至基於 OpenJDK 的方法,為開發者建立一個通用程式碼庫。雖然沒法規避 Java APIs 官司,但至少可以減少潛在的可能糾紛。
到了 2017 年的 Google I/O 大會,Google 宣佈 Kotlin 成為 Android 開發的一級語言,可以說對 Kotlin 寄予了厚望。此後,Kotlin 也被開發者視為 Java 的替代品。
在之後的一年時間裡,Google 可以說把 Kotlin 當親兒子看待,為什麼這麼說呢?讓我們來梳理這一年 Google 為 Kotlin 做了什麼:
2017 年 11 月,Android Studio 3.0 正式開放下載,此版本的 Android Studio 將 Kotlin 語言支援整合到 IDE 中,在此版本上,程式碼自動完成和語法突出顯示都可以在此版本上平穩執行,今年 4 月推出的 Android Studio 3.1 為 Kotlin 程式碼提供了更好的 Lint 支援,並透過為 Android Emulator 新增 Quick Boot 功能加快了測試速度。2018 年 2 月,Google 推出預覽版本的 Android KTX,Android KTX 是一組擴充套件程式,它在 Android 框架和支援庫上提供了一個良好的 API 層,使 Kotlin 程式碼更加簡潔。在 Google I/O 2018 上,Google 釋出了 Android Jetpack,它是下一代的 Android 元件,它將支援庫向後相容和立即更新的優點融合到更多元件中,提高開發速率和質量,不僅如此,Android Jetpack 將全面相容 Kotlin,而且它還能利用 Android KTX 使得 Kotlin 程式碼更加簡潔。這些都是 Google 逐漸向 Kotlin 靠攏的證據,雖然還不至於讓 Kotlin 完全取代 Java,但不難看出 Google 的“偏心”。事實上,Kotlin 自己也非常爭氣:2017 年 11 月,在第一屆 Kotlin 專題大會 KotlinConf 上,Kotlin 首席設計師 Andrey Breslav 宣佈 Kotlin 將支援 iOS 開發和 Web 開發,這意味著 Kotlin 向全平臺開發邁出了重要的一步。
Kotlin 目前正處於發展的初始階段,還有很多成長的空間。Google 現在是把它當成 Android 黃昏時期的救命稻草,它能與 Java 100% 互通,但它存在的目的並不是為了取代 Java,只是為了讓開發者有多種選擇。雖說程式語言只是軟體實現的一種工具,開發者無論選擇哪種語言都沒有絕對的對與錯。但在網際網路時代,開發者應該懂得審時度勢,擁抱變化,才能走得更遠。