谷歌官方 “pick”Kotlin:代碼量比 Java 減少 80%
上周,谷歌剛剛推出免費(fèi)的 Kotlin 和 Android 在線課程,教開(kāi)發(fā)者使用 Kotlin 構(gòu)建 Android 應(yīng)用。很快,Google Home 團(tuán)隊(duì)也現(xiàn)身說(shuō)法,通過(guò)自身經(jīng)歷,展示了 Kotlin 開(kāi)發(fā)的好處。
Google Home 應(yīng)用程序可用來(lái)連接并管理各類智能家居設(shè)備。與不少受谷歌 “Kotlin-first” 倡議影響的應(yīng)用相同,Google Home 也選擇將 Kotlin 納入其代碼庫(kù)。截至今年六月,該應(yīng)用中約有 30% 的代碼采用 Kotlin 編寫(xiě),今后的新功能也被鼓勵(lì)用 Kotlin 進(jìn)行開(kāi)發(fā)。
Google Home 團(tuán)隊(duì)提到,與 Kotlin 配合使用的是同樣被谷歌推行的 Jetpack 開(kāi)源 UI 工具包,它結(jié)合了反應(yīng)式編程模型和 Kotlin 編程語(yǔ)言的簡(jiǎn)潔性和易用性,旨在簡(jiǎn)化 UI 開(kāi)發(fā)。
盡管目前只有 1/3 代碼遷移到了 Kotlin,其高效和簡(jiǎn)潔的特性已使 Google Home 團(tuán)隊(duì)感受頗深。他們以數(shù)據(jù)類和 Parcelize 插件的使用為例證:在 Java 中由 126 行手寫(xiě)代碼組成的類,在 Kotlin 中僅用 23 行就能夠表示——代碼量減少了 80%。此外,Kotlin 中一些函數(shù)方法還簡(jiǎn)化了許多嵌套循環(huán)和過(guò)濾檢查。
另一方面,Kotlin 的可空性(nullability)也得到了贊許。依舊是與 Java 相比,Google Home 團(tuán)隊(duì)指出,“Java 中對(duì)可空性注釋的用法不一致時(shí),可能會(huì)導(dǎo)致遺漏一些 bug”。而采用 Kotlin 以來(lái),Google Home 的 NullPointerExceptions 減少了 33%,這恰是 Google Play 控制臺(tái)上最常見(jiàn)的崩潰類型,由此帶來(lái)的崩潰數(shù)量減少也許能夠顯著改善用戶體驗(yàn)。
Kotlin 編程語(yǔ)言 2011 年由 JetBrains 推出,2012 年開(kāi)源,2017 年成為 Android 官方開(kāi)發(fā)語(yǔ)言,并于 2019 年成為 Andoid 開(kāi)發(fā)官方首選語(yǔ)言。
從初始支持 Kotlin 再到 “Kotlin-first”,谷歌一直在對(duì)其進(jìn)行多方位扶持,先后推出了 Kotlin 免費(fèi)在線課程和使用 Kotlin 構(gòu)建 Android 應(yīng)用的課程;同時(shí)不斷完善著相關(guān)生態(tài),比如今年四月開(kāi)源了 gRPC-Kotlin/JVM,讓開(kāi)發(fā)者可以在 Kotlin 項(xiàng)目中更方便地使用 gRPC。
隨著谷歌的極力推行,Kotlin 的關(guān)注度一路水漲船高,最新的 JVM 生態(tài)報(bào)告顯示,Kotlin 已成為第二受歡迎的 JVM 語(yǔ)言。Android 開(kāi)發(fā)專家沈哲在接受開(kāi)源中國(guó)的采訪時(shí)曾提到,國(guó)內(nèi)一些公司也開(kāi)始使用 Kotlin 開(kāi)發(fā) Android 項(xiàng)目,“越來(lái)越多的開(kāi)發(fā)者會(huì)選擇 Kotlin 作為原生 App 的首選開(kāi)發(fā)語(yǔ)言”。
作為一門(mén) JVM 語(yǔ)言,一門(mén)兼容甚至被認(rèn)為要取代 Java 的語(yǔ)言,Kotlin 的出場(chǎng)也往往伴隨著與 Java 的比較。谷歌甚至推出了從 Java 遷移到 Kotlin 的官方指南。部分 Android 開(kāi)發(fā)者仍在猶豫是否要轉(zhuǎn)到 Kotlin,有一些人已經(jīng)從 Java 遷移到 Kotlin 又遷回了 Java。在一年前 Dice 網(wǎng)站發(fā)布的調(diào)查中,85% 的受訪者幾乎一邊倒地選擇仍舊使用 Java 來(lái)構(gòu)建 Android 應(yīng)用程序。
但其實(shí)在谷歌工程師看來(lái),并沒(méi)有必要將二者完全劃清界限。Android Studio 技術(shù)負(fù)責(zé)人 Jeffrey van Gogh 就曾講過(guò),Java 與 Kotlin 具有極高的互操作性,所以兩者完全可以共存于同一個(gè)項(xiàng)目中。目前如 Google Home 這樣的谷歌自家應(yīng)用,不少都采用這種融合式做法,Kotlin 更多地被用來(lái)編寫(xiě)新功能。
那么,再回到 “Kotlin 還是 Java” 這個(gè)也許已經(jīng)令 Android 開(kāi)發(fā)者感到厭煩的問(wèn)題上,定論顯然并不存在,關(guān)鍵是選擇最適合的方式。