應(yīng)用大受歡迎织盼,團(tuán)隊(duì)肯定備受鼓舞杨何,于是決定把最棒的創(chuàng)意和功能添加進(jìn)應(yīng)用中,然后用戶們會更加滿意悔政,如此循環(huán)……然而如此美妙的圖景在現(xiàn)實(shí)中會遇到 "現(xiàn)實(shí)的問題":
- 代碼量陡增晚吞,以及隨之而來的開發(fā)和維護(hù)成本
- 代碼中的錯誤也隨之增加,進(jìn)而造成應(yīng)用的崩潰數(shù)量增加
讓我們看看 Duolingo 和 Google Home 是如何解決這些問題的谋国。
從 Kotlin "檢查員" 到 "專家"
Duolingo 是世界上最受歡迎的語言學(xué)習(xí)平臺之一槽地,也是 Google Play 上下載量最高的免費(fèi)教育應(yīng)用之一 (已突破 2 億),為超過 3 億名學(xué)習(xí)者提供可免費(fèi)使用的語言學(xué)習(xí)服務(wù)芦瘾。
隨著應(yīng)用自身的演進(jìn)捌蚊,Duolingo 的 Android 開發(fā)者發(fā)現(xiàn)代碼庫的代碼行數(shù)每年增長 46% 之多!為徹底解決這個問題近弟,團(tuán)隊(duì)最終一致決定從 Java 遷移至 Kotlin缅糟。
該團(tuán)隊(duì)發(fā)揚(yáng)了真正的 Duolingo 風(fēng)格,通過開展每日排行榜競賽并鼓勵學(xué)習(xí)祷愉,讓遷移過程充滿游戲樂趣 (沒錯窗宦,和他們在 Duolingo 應(yīng)用中引入的游戲化思想如出一轍)。該團(tuán)隊(duì)中經(jīng)驗(yàn)豐富的 Kotlin 開發(fā)者擔(dān)任 "Kotlin 檢查員" 角色二鳄,并分享代碼審核方面的最佳做法赴涵,最終該團(tuán)隊(duì)的所有 Android 開發(fā)者都成為了 Kotlin 專家。
代碼量平均減少 30%
兩年后订讼,Duolingo 團(tuán)隊(duì)完成了遷移工作髓窜,代碼的可維護(hù)性得到顯著提升。他們發(fā)現(xiàn)欺殿, 將 Java 文件轉(zhuǎn)換為 Kotlin 文件后寄纵,代碼行數(shù)平均減少了 30%,某些情況下高達(dá) 90% 脖苏。
- 團(tuán)隊(duì)博客: 將 Duolingo 的 Android 100% 遷移至 Kotlin
總體而言,在遷移到 Kotlin 后棍潘,我們非常滿意哺壶,也很高興看到 Kotlin 在我們公司和整個軟件行業(yè)中的使用率不斷增長!
—— Art Chaidarun蜒谤,資深高級軟件工程師
盡管有了新的產(chǎn)品功能,活躍貢獻(xiàn)者的數(shù)量增加了一倍以上至扰,但他們的代碼庫規(guī)模幾乎與兩年前未遷移時一樣鳍徽,這證明這一決策帶來了不錯的投資收益。此外敢课,內(nèi)部問卷調(diào)查顯示他們的 NPS 提升了 129 個點(diǎn)阶祭,開發(fā)者滿意度躍升 绷杜,開發(fā)者認(rèn)為是采用 Kotlin 起到了主要作用。現(xiàn)在濒募,他們的 Android 應(yīng)用完全使用 Kotlin 代碼庫鞭盟,這讓他們可以更加放心、高效地開展工作瑰剃。
Google Home 逐步引入 Kotlin
Google Home 應(yīng)用 可幫助您設(shè)置齿诉、管理和控制您的 Google Home、Google Nest 和 Chromecast 設(shè)備以及數(shù)千種智能互聯(lián)家居產(chǎn)品 (如燈具晌姚、攝像頭粤剧、恒溫器等等)。其背后的工程團(tuán)隊(duì)使用 Kotlin 和 Android Jetpack 庫來提升工程生產(chǎn)力和開發(fā)者滿意度挥唠,這讓他們受益良多抵恋。
團(tuán)隊(duì)決定將 Kotlin 整合到代碼庫中,以提升編程效率宝磨,并使用現(xiàn)代語言功能 (如 var/val弧关、智能投射、協(xié)程等)唤锉。 截至 2020 年 6 月世囊,30% 左右的代碼庫是使用 Kotlin 編寫的 ,且建議使用 Kotlin 來開發(fā)所有新功能腌紧。
該團(tuán)隊(duì)還采用 Jetpack 庫來提高開發(fā)者的速度茸习、降低對樣板代碼維護(hù)的需求并減少代碼量。Jetpack 庫還有助于提高代碼的可測試性壁肋,因?yàn)橛懈逦墓δ苓吔绾?API号胚。
最常見的崩潰直降 33%
Kotlin 可助您提高工作效率,讓您編寫更少的代碼來實(shí)現(xiàn)更多的功能浸遗,這就是您可實(shí)現(xiàn)的 "速度" 提升猫胁。
—— Jared Burrows,Google Home 的軟件工程師
與等效的現(xiàn)有 Java 代碼相比跛锌,改用 Kotlin 可以減少所需的代碼量弃秆。例如,使用數(shù)據(jù)類和 Parcelize 插件: 一個在使用 Java 時需要手動編寫 126 行代碼的類髓帽,現(xiàn)在使用 Kotlin 只需編寫 23 行菠赚,代碼量減少了 80% 。此外郑藏,還可以自動生成并及時更新均衡和解析方法衡查。使用 Kotlin 中提供的實(shí)用方法,還可以簡化許多嵌套循環(huán)和過濾檢查必盖。
由于 Kotlin 可以將是否可為 null 作為語言的一部分拌牲,因此可以避免棘手的情況俱饿,例如在 Java 中不一致地使用是否可為 null 注釋可能會導(dǎo)致遺漏錯誤。實(shí)現(xiàn) Kotlin 后塌忽,Google Home 應(yīng)用團(tuán)隊(duì)遇到的 NullPointerExceptions 減少了 33%拍埠。這是 Google Play 管理中心中最常見的崩潰類型土居,因此減少此類崩潰可以顯著提升用戶體驗(yàn)枣购。
對于 Google Home 這樣的大型成熟應(yīng)用 (代碼超過數(shù)百萬行),能夠逐步添加 Jetpack 庫會很有幫助装盯。納入這些庫后坷虑,該團(tuán)隊(duì)可以整合并替換量身定制的解決方案,有時甚至只需要一個庫埂奈。Jetpack 庫可幫助工程師遵循最佳做法迄损,并且編寫更簡潔的代碼 (例如,使用 Room 或 ConstraintLayout)账磺,因此可讀性也有所提高芹敌。該團(tuán)隊(duì)將許多新的 Jetpack 庫視為 "必備庫",包括 ViewModel 和 LiveData垮抗,它們在 Google Home 代碼庫中得到廣泛使用氏捞。
Google Home 應(yīng)用團(tuán)隊(duì)發(fā)現(xiàn)將 Jetpack KTX 與 Kotlin 協(xié)程集成特別有用。該團(tuán)隊(duì)現(xiàn)在可以將協(xié)程與生命周期感知型組件 (如 ViewModel) 結(jié)合使用冒版,從而避免復(fù)雜的異步編程錯誤液茎。
上手 Kotlin,現(xiàn)在就是最佳時機(jī)
正如 Google Home 團(tuán)隊(duì)所說的辞嗡,Kotlin 可以逐步添加進(jìn)現(xiàn)有的項(xiàng)目捆等,并帶來更簡潔的代碼和更少的錯誤。由于 Jetpack 中諸如 Paging 3 等開發(fā)庫已經(jīng)優(yōu)先使用 Kotlin 進(jìn)行了重寫续室,再加上正在如火如荼開發(fā)的 Jetpack Compose栋烤,開發(fā)者們在為應(yīng)用構(gòu)建界面、實(shí)現(xiàn)功能的時候會愈發(fā)事半功倍挺狰。
我們最近剛剛發(fā)布了 Kotlin 1.4明郭,其中引入的諸多全新語言特性改善了編寫 Kotlin 代碼的 "人機(jī)工程學(xué)",更通過對編譯器的改進(jìn)提升了其整體質(zhì)量和性能丰泊。
現(xiàn)在就是上手 Kotlin 的最佳時機(jī)薯定,我們已經(jīng)為您準(zhǔn)備了 全新的課程,助力您開啟 Kotlin 開發(fā)之旅瞳购。