功能更強(qiáng),代碼和錯誤更少澳腹!Duolingo 和 Google Home 的 Kotlin 之旅

image

應(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 "檢查員" 到 "專家"

image

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% 脖苏。

△ Duolingo 代碼量隨時間的變化程拭,綠色為 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 代碼庫鞭盟,這讓他們可以更加放心、高效地開展工作瑰剃。

image

Google Home 逐步引入 Kotlin

image

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 庫可幫助工程師遵循最佳做法迄损,并且編寫更簡潔的代碼 (例如,使用 RoomConstraintLayout)账磺,因此可讀性也有所提高芹敌。該團(tuán)隊(duì)將許多新的 Jetpack 庫視為 "必備庫",包括 ViewModelLiveData垮抗,它們在 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ā)之旅瞳购。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沉唠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苛败,更是在濱河造成了極大的恐慌满葛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罢屈,死亡現(xiàn)場離奇詭異嘀韧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缠捌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門锄贷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人曼月,你說我怎么就攤上這事谊却。” “怎么了哑芹?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵炎辨,是天一觀的道長。 經(jīng)常有香客問我聪姿,道長碴萧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任末购,我火速辦了婚禮破喻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盟榴。我一直安慰自己曹质,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布擎场。 她就那樣靜靜地躺著羽德,像睡著了一般。 火紅的嫁衣襯著肌膚如雪顶籽。 梳的紋絲不亂的頭發(fā)上玩般,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音礼饱,去河邊找鬼坏为。 笑死,一個胖子當(dāng)著我的面吹牛镊绪,可吹牛的內(nèi)容都是我干的匀伏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蝴韭,長吁一口氣:“原來是場噩夢啊……” “哼够颠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榄鉴,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤履磨,失蹤者是張志新(化名)和其女友劉穎蛉抓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剃诅,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巷送,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矛辕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑跛。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖聊品,靈堂內(nèi)的尸體忽然破棺而出飞蹂,到底是詐尸還是另有隱情,我是刑警寧澤翻屈,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布陈哑,位于F島的核電站,受9級特大地震影響妖胀,放射性物質(zhì)發(fā)生泄漏芥颈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一赚抡、第九天 我趴在偏房一處隱蔽的房頂上張望爬坑。 院中可真熱鬧,春花似錦涂臣、人聲如沸盾计。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽署辉。三九已至,卻和暖如春岩四,著一層夾襖步出監(jiān)牢的瞬間哭尝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工剖煌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留材鹦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓耕姊,卻偏偏與公主長得像桶唐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茉兰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354