讓我們看看 Duolingo 和 Google Home 是如何解決這些問題的。
Duolingo 是世界上最受歡迎的語言學習平臺之一,也是 Google Play 上下載量最高的免費教育應用之一 (已突破 2 億),為超過 3 億名學習者提供可免費使用的語言學習服務。
隨著應用自身的演進,Duolingo 的 Android 開發者發現代碼庫的代碼行數每年增長 46% 之多!為徹底解決這個問題,團隊最終一致決定從 Java 遷移至 Kotlin。
該團隊發揚了真正的 Duolingo 風格,通過開展每日排行榜競賽並鼓勵學習,讓遷移過程充滿遊戲樂趣 (沒錯,和他們在 Duolingo 應用中引入的遊戲化思想如出一轍)。該團隊中經驗豐富的 Kotlin 開發者擔任 "Kotlin 檢查員" 角色,並分享代碼審核方面的最佳做法,最終該團隊的所有 Android 開發者都成為了 Kotlin 專家。
兩年後,Duolingo 團隊完成了遷移工作,代碼的可維護性得到顯著提升。他們發現,將 Java 文件轉換為 Kotlin 文件後,代碼行數平均減少了 30%,某些情況下高達 90%。
△ Duolingo 代碼量隨時間的變化,綠色為 Kotlin
團隊博客: 將 Duolingo 的 Android 100% 遷移至 Kotlinhttps://blog.duolingo.com/migrating-duolingos-android-app-to-100-kotlin/總體而言,在遷移到 Kotlin 後,我們非常滿意,也很高興看到 Kotlin 在我們公司和整個軟體行業中的使用率不斷增長!—— Art Chaidarun,資深高級軟體工程師儘管有了新的產品功能,活躍貢獻者的數量增加了一倍以上,但他們的代碼庫規模幾乎與兩年前未遷移時一樣,這證明這一決策帶來了不錯的投資收益。此外,內部問卷調查顯示他們的 NPS 提升了 129 個點,開發者滿意度躍升,開發者認為是採用 Kotlin 起到了主要作用。現在,他們的 Android 應用完全使用 Kotlin 代碼庫,這讓他們可以更加放心、高效地開展工作。
Google Home 應用可幫助您設置、管理和控制您的 Google Home、Google Nest 和 Chromecast 設備以及數千種智能互聯家居產品 (如燈具、攝像頭、恆溫器等等)。其背後的工程團隊使用 Kotlin 和 Android Jetpack 庫來提升工程生產力和開發者滿意度,這讓他們受益良多。
團隊決定將 Kotlin 整合到代碼庫中,以提升編程效率,並使用現代語言功能 (如 var/val、智能投射、協程等)。截至 2020 年 6 月,30% 左右的代碼庫是使用 Kotlin 編寫的,且建議使用 Kotlin 來開發所有新功能。
該團隊還採用 Jetpack 庫來提高開發者的速度、降低對樣板代碼維護的需求並減少代碼量。Jetpack 庫還有助於提高代碼的可測試性,因為有更清晰的功能邊界和 API。
Kotlin 可助您提高工作效率,讓您編寫更少的代碼來實現更多的功能,這就是您可實現的 "速度" 提升。—— Jared Burrows,Google Home 的軟體工程師與等效的現有 Java 代碼相比,改用 Kotlin 可以減少所需的代碼量。例如,使用數據類和 Parcelize 插件: 一個在使用 Java 時需要手動編寫 126 行代碼的類,現在使用 Kotlin 只需編寫 23 行,代碼量減少了 80%。此外,還可以自動生成並及時更新均衡和解析方法。使用 Kotlin 中提供的實用方法,還可以簡化許多嵌套循環和過濾檢查。
由於 Kotlin 可以將是否可為 null 作為語言的一部分,因此可以避免棘手的情況,例如在 Java 中不一致地使用是否可為 null 注釋可能會導致遺漏錯誤。實現 Kotlin 後,Google Home 應用團隊遇到的 NullPointerExceptions 減少了 33%。這是 Google Play 管理中心中最常見的崩潰類型,因此減少此類崩潰可以顯著提升用戶體驗。
對於 Google Home 這樣的大型成熟應用 (代碼超過數百萬行),能夠逐步添加 Jetpack 庫會很有幫助。納入這些庫後,該團隊可以整合併替換量身定製的解決方案,有時甚至只需要一個庫。Jetpack 庫可幫助工程師遵循最佳做法,並且編寫更簡潔的代碼 (例如,使用 Room 或 ConstraintLayout),因此可讀性也有所提高。該團隊將許多新的 Jetpack 庫視為 "必備庫",包括 ViewModel 和 LiveData,它們在 Google Home 代碼庫中得到廣泛使用。
https://developer.android.google.cn/training/constraint-layouthttps://developer.android.google.cn/topic/libraries/architecture/viewmodelGoogle Home 應用團隊發現將 Jetpack KTX 與 Kotlin 協程集成特別有用。該團隊現在可以將協程與生命周期感知型組件 (如 ViewModel) 結合使用,從而避免複雜的異步編程錯誤。
正如 Google Home 團隊所說的,Kotlin 可以逐步添加進現有的項目,並帶來更簡潔的代碼和更少的錯誤。由於 Jetpack 中諸如 Paging 3 等開發庫已經優先使用 Kotlin 進行了重寫,再加上正在如火如荼開發的 Jetpack Compose,開發者們在為應用構建界面、實現功能的時候會愈發事半功倍。
我們最近剛剛發布了 Kotlin 1.4,其中引入的諸多全新語言特性改善了編寫 Kotlin 代碼的 "人機工程學",更通過對編譯器的改進提升了其整體質量和性能。
現在就是上手 Kotlin 的最佳時機,我們已經為您準備了全新的課程,助力您開啟 Kotlin 開發之旅。