精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

代碼行數(shù)減少 30-90%!多鄰國(guó)從Java遷移到Kotlin的奇妙體驗(yàn)

新聞 前端
兩年后,它變成了 100% 的 Kotlin App!從代碼可維護(hù)性和開(kāi)發(fā)者滿意度方面來(lái)看,這次遷移是一個(gè)巨大的成功。

 [[328346]]

英文學(xué)習(xí) App Duolingo(多鄰國(guó))的 Android 版最初是使用 Java 開(kāi)發(fā)的,并一直沿用了 5 年。兩年后,它變成了 100% 的 Kotlin App!從代碼可維護(hù)性和開(kāi)發(fā)者滿意度方面來(lái)看,這次遷移是一個(gè)巨大的成功。網(wǎng)上已經(jīng)有很多 Kotlin 的學(xué)習(xí)資源,所以在這篇文章中,我們將重點(diǎn)介紹如何將一個(gè)有百萬(wàn)用戶的 App 遷移到 Kotlin。

代碼行數(shù)減少 30-90%!多鄰國(guó)從Java遷移到Kotlin的奇妙體驗(yàn)

1. 為什么選擇 Kotlin

2018 年初,我們開(kāi)始考慮使用 Kotlin,當(dāng)時(shí) Android 對(duì) Kotlin 的支持還不到一年時(shí)間,而且不知道 Kotlin 會(huì)像現(xiàn)在這樣流行,也不知道它會(huì)取代 Java 成為 Android 的開(kāi)發(fā)首選語(yǔ)言。

我們當(dāng)時(shí)的主要預(yù)期:

  • 生產(chǎn)力。Kotlin 比 Java 要簡(jiǎn)潔得多,編寫(xiě) Kotlin 代碼速度更快,維護(hù)起來(lái)也更容易。它與 Java 的無(wú)縫互操作性以及添加語(yǔ)言新特性的方式讓 Android 開(kāi)發(fā)者可以輕松上手。
  • 穩(wěn)定性。我們的代碼庫(kù)歷史記錄中有 100 多次提交都與“修復(fù) NullPointerException 問(wèn)題”有關(guān),這些問(wèn)題都來(lái)自 Java 代碼。Kotlin 的 Null 安全特性避免了大部分 NullPointerException,讓我們?cè)诖a評(píng)審期間可以更多地關(guān)注其他問(wèn)題。
  • 開(kāi)發(fā)者滿意度。Stack Overflow 發(fā)布的 2018 年度開(kāi)發(fā)者編程語(yǔ)言報(bào)告表明,Kotlin 是開(kāi)發(fā)者最喜愛(ài)的編程語(yǔ)言之一,僅次于 Rust。我們的開(kāi)發(fā)人員已經(jīng)對(duì)公司內(nèi)部另外兩個(gè)主要平臺(tái)的語(yǔ)言升級(jí)做出了積極的反應(yīng):在 iOS 應(yīng)用程序中使用 Swift,以及使用 TypeScript 完全重寫(xiě)了 duolingo.com。
  • 當(dāng)然,遷移也存在一些風(fēng)險(xiǎn),主要是開(kāi)發(fā)人員的時(shí)間成本問(wèn)題。另一個(gè)擔(dān)憂是 Kotlin 是否會(huì)像 CoffeeScript 一樣,最后可能會(huì)被它的“影子”語(yǔ)言打敗。
  • 最后,我們的 Android 開(kāi)發(fā)人員一致認(rèn)為,Kotlin 的好處很有價(jià)值,足以證明使用 Kotlin 開(kāi)發(fā)新代碼是合理的,盡管我們還沒(méi)有準(zhǔn)備好全面遷移所有的代碼。

2. 讓開(kāi)發(fā)人員跟上進(jìn)度

Duolingo 的所有 Android 開(kāi)發(fā)人員每?jī)芍荛_(kāi)一次例會(huì),討論最近和即將做出的平臺(tái)變更和非正式的事后分析,并進(jìn)行問(wèn)答。前期的會(huì)議專門(mén)介紹 Kotlin,內(nèi)容主要基于 Kotlin 官方語(yǔ)言指南、Kotlin Koans、Android 官方文檔和 MindOrks 備忘單,等等。

然后,每個(gè) Android 開(kāi)發(fā)人員都分配到一些 Java 代碼,負(fù)責(zé)將它們遷移到 Kotlin。我們讓相對(duì)有 Kotlin 經(jīng)驗(yàn)的開(kāi)發(fā)人員擔(dān)任“Kotlin checker”角色,讓他們?cè)诖a評(píng)審期間分享最佳實(shí)踐。這個(gè)角色的人數(shù)逐步增加,直到所有的 Android 開(kāi)發(fā)人員都包含在內(nèi)。

3. Kotlin 相關(guān)的開(kāi)發(fā)工具

從一開(kāi)始,我們就對(duì) Kotlin 工具進(jìn)行容器化,并在代碼預(yù)提交和 GitHub 拉取請(qǐng)求狀態(tài)檢查中強(qiáng)制使用,以此來(lái)確保代碼的一致性。

我們使用 detekt、IntelliJ Inspection、Android lint 和我們自己開(kāi)發(fā)的基于正則表達(dá)式的 Splinter 來(lái)檢查所有的 Kotlin 代碼。

在代碼自動(dòng)格式化方面,我們?cè)诠痉秶鷥?nèi)使用了 ktlint,將其作為代碼預(yù)提交 hook 的一部分。另一個(gè)工具是 IntelliJ Formatter,不過(guò)我們發(fā)現(xiàn)它在 Docker 中運(yùn)行會(huì)慢一些。

在將 Java 代碼減少到只有 10% 的時(shí)候,我們從 CI 管道中移除了 PMD、SpotBugs 和大部分檢查工具。繼續(xù)使用這些 Java 工具將會(huì)降低我們的開(kāi)發(fā)速度,而且不會(huì)為我們提供太多的價(jià)值。

4. 轉(zhuǎn)換 Java 代碼

為了讓代碼轉(zhuǎn)換的評(píng)審工作盡可能輕松,我們建議每個(gè)源文件的拉取請(qǐng)求至少包含三個(gè)單獨(dú)的提交:

  • 運(yùn)行 IDE 的自動(dòng)轉(zhuǎn)換器。這個(gè)提交會(huì)造成代碼行錯(cuò)亂,但不需要仔細(xì)檢查,因?yàn)閷?duì)于運(yùn)行時(shí)來(lái)說(shuō)通常是安全的,盡管可能會(huì)引入編譯時(shí)錯(cuò)誤。
  • 修復(fù)編譯錯(cuò)誤。這些修復(fù)通常很容易進(jìn)行,例如,在必要時(shí)添加 @JvmStatic 注解。
  • 重構(gòu)。開(kāi)發(fā)人員需要重構(gòu)代碼,讓代碼更符合 Kotlin 的習(xí)慣,例如使用 sumBy 而不是 for 循環(huán)。

我們發(fā)現(xiàn),將 Java 文件轉(zhuǎn)換成 Kotlin 后,行數(shù)平均減少了 30% 左右,在某些情況下甚至減少了 90%!

雖然移植代碼對(duì)于我們的 Android 平臺(tái)工程師來(lái)說(shuō)不是問(wèn)題,但對(duì)于我們的產(chǎn)品團(tuán)隊(duì)來(lái)說(shuō)可能會(huì)相對(duì)困難。我們鼓勵(lì)產(chǎn)品團(tuán)隊(duì)的開(kāi)發(fā)人員在空閑時(shí)間遷移經(jīng)常修改的代碼,還通過(guò)每天的排行榜比賽來(lái)游戲化這個(gè)過(guò)程。最終,產(chǎn)品團(tuán)隊(duì)的開(kāi)發(fā)人員擔(dān)起了一半的工作量。

5. 絆腳石

Kotlin 的工具生態(tài)系統(tǒng)比 Java 的要小得多。盡管如此,它已經(jīng)足夠滿足我們的需求了。

我們偶爾還是會(huì)遇到 NullPointerException 和 IllegalArgumentException,這些異常來(lái)自第三方 Java 依賴庫(kù)(比如 Android 框架本身),它們沒(méi)有遵循最佳實(shí)踐,沒(méi)有使用可空注解,以至于 Kotlin 編譯器無(wú)法知道某些方法的參數(shù)或返回值可以為空。隨著谷歌給它們的公共 API 加入注解,這種情況得到了改善。

不過(guò),Kotlin 仍然缺乏對(duì)一些 Java 特性的原生支持,包括不太常見(jiàn)的超類(lèi)靜態(tài)受保護(hù)方法調(diào)用和神秘的超類(lèi)構(gòu)造函數(shù)調(diào)用,但這類(lèi)問(wèn)題很容易解決。

6. 結(jié)果

在 2018 年初引入 Kotlin 之前,我們的 Android 代碼庫(kù)的代碼行數(shù)每年增長(zhǎng) 46%。兩年過(guò)去了,我們加入了很多新特性,活躍的貢獻(xiàn)者數(shù)量增加了一倍多,而我們的代碼庫(kù)現(xiàn)在幾乎只和以前一樣大!

根據(jù) NPS 數(shù)據(jù),這一次 Android 開(kāi)發(fā)人員的滿意度增加了 129 個(gè)點(diǎn),大多數(shù)開(kāi)發(fā)人員認(rèn)為是采用 Kotlin(以及我們的工具)起到了主要作用。NPS 的數(shù)據(jù)具體為:

https://en.wikipedia.org/wiki/Net_Promoter

我們現(xiàn)在也同時(shí)使用 Python 和 Java 作為后端服務(wù)開(kāi)發(fā)語(yǔ)言,這幾乎不需要額外的工作量,因?yàn)槲覀兛梢灾赜矛F(xiàn)有服務(wù)中的 Java 代碼和 Android 代碼庫(kù)中的 Kotlin 工具。

總的來(lái)說(shuō),在遷移到 Kotlin 之后,我們感到非常開(kāi)心。我們也很高興能夠看到它在我們的公司內(nèi)部和整個(gè)軟件行業(yè)中的采用率不斷增長(zhǎng)!

 

責(zé)任編輯:張燕妮 來(lái)源: 架構(gòu)頭條
相關(guān)推薦

2015-01-29 09:52:43

Swift 開(kāi)源蘋(píng)果

2011-04-25 09:35:31

TwitterJava

2020-04-13 08:46:22

MongoDBES服務(wù)器

2010-09-29 11:06:21

活動(dòng)目錄OpenLDAP

2012-05-21 10:23:36

2013-06-21 13:49:08

MariaDB

2010-07-20 09:48:33

2023-08-08 21:03:52

2016-10-26 16:44:44

WatchfinderAWS云計(jì)算

2021-06-22 10:16:39

Java工具庫(kù)代碼

2009-02-06 10:32:00

UnixLinux服務(wù)器

2013-05-03 09:49:38

MySQLMariaDB

2011-06-24 10:10:35

SVN

2020-07-27 11:35:26

GitHub代碼開(kāi)發(fā)者

2025-10-29 08:06:49

2022-06-06 07:24:09

Caddy開(kāi)源Ubuntu

2021-11-29 09:44:03

UmiJSVite前端

2021-01-05 08:49:52

DevOps開(kāi)發(fā)工具

2014-04-21 15:01:15

2021-11-02 09:54:51

Java開(kāi)發(fā)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚欧在线免费观看| 国产精品第一区| 国产a√精品区二区三区四区| 欧美草逼视频| 久久久综合视频| 国产在线拍偷自揄拍精品| 久久久久久久久久久97| 欧美美女在线| 日韩免费视频线观看| 免费观看精品视频| 国产激情在线| 久久久亚洲精品一区二区三区| 国产精品永久在线| 日本熟妇成熟毛茸茸| 成人免费a**址| 精品国产第一区二区三区观看体验| 日本熟妇人妻xxxxx| 在线网址91| 国产欧美中文在线| 国产精品一区二区三区在线观| 91porny九色| 国精品一区二区| 色婷婷久久一区二区| www.男人天堂| 久久av偷拍| 欧美性大战久久久| 国产白丝袜美女久久久久| 毛片在线播放a| 久久久www免费人成精品| 成人三级视频在线观看一区二区| 中文字幕av资源| 久久精品一区| 97视频在线观看播放| 青青草原在线免费观看| 天天av综合| 一色桃子一区二区| 欧美双性人妖o0| 澳门成人av| 日韩免费性生活视频播放| 九九热免费在线观看| 日韩欧美一区二区三区在线观看 | 国产精品亚洲综合| 国产精品久久久久毛片| 免费人成在线不卡| 国产不卡在线观看| 国产黄色片免费看| 9色国产精品| 欧美激情亚洲视频| 天天干中文字幕| 91精品国产调教在线观看| 社区色欧美激情 | xxxxx99| 亚洲最大在线| 亚洲精品视频免费| 37p粉嫩大胆色噜噜噜| 日韩av影院| 日韩电影中文字幕在线| 波多野结衣先锋影音| 电影一区二区在线观看| 亚洲成人精品久久久| 久久久午夜精品福利内容| 欧美亚洲色图校园春色| 日韩国产欧美区| 精品国产av无码| 国产精品免费大片| 在线观看国产成人av片| 少妇的滋味中文字幕bd| 亚洲国产老妈| 久久久久久久一区二区三区| 国产女同在线观看| 久色成人在线| 国产精品一二区| 国产美女www爽爽爽视频| 国产馆精品极品| 狠狠色综合网站久久久久久久| 性xxxxbbbb| 国产亚洲短视频| 在线一区日本视频| 成人性生交大片免费看网站| 午夜电影一区二区三区| 成年人小视频网站| 亚洲福利影视| 精品国产免费久久| 超碰97人人干| 欧美丰满日韩| 欧美高清一级大片| www.色国产| 国内精品免费**视频| 国产精品成人观看视频免费| 你懂的在线播放| 日韩一区欧美一区| 欧美日韩黄色一级片| 成人在线中文| 欧美一级片在线观看| 亚洲成人av免费在线观看| 成人vr资源| 欧美第一黄网免费网站| 欧美a视频在线观看| 国产在线播放一区二区三区| 精品欧美一区二区精品久久| 在线观看a视频| 亚洲第一福利一区| 日本中文字幕精品—区二区| 丁香5月婷婷久久| 中文字幕在线精品| 日韩三级av在线| 久久精品99国产国产精| 国产在线欧美日韩| 国产在线69| 一本一本大道香蕉久在线精品 | 欧美激情三区| 亚洲激情视频网| 日本黄色免费片| 午夜在线a亚洲v天堂网2018| 亚洲直播在线一区| av网站大全在线观看| 亚洲成av人片一区二区梦乃| 污污网站在线观看视频| 宅男在线一区| 久久人人爽人人爽人人片av高请| 怡红院男人的天堂| 久久婷婷久久一区二区三区| www.xxx麻豆| 国产亚洲高清在线观看| 中文字幕亚洲综合| 久久亚洲精品石原莉奈 | 99国产精品久久久久老师| freemovies性欧美| 日韩欧美成人精品| 一区二区三区少妇| 精品二区视频| 97超碰资源| 成人影院在线看| 欧美色爱综合网| 蜜臀久久99精品久久久久久| 99热在线精品观看| 国产伦精品一区二区三区在线| 国产不卡在线| 91精品欧美福利在线观看| 刘亦菲国产毛片bd| 蜜桃久久精品一区二区| 日韩午夜视频在线观看| 性欧美18~19sex高清播放| 亚洲国产精品免费| 国产女同在线观看| 久久综合九色综合97_久久久| 免费毛片网站在线观看| 白嫩白嫩国产精品| 97国产suv精品一区二区62| 欧美一级做性受免费大片免费| 亚洲美女在线一区| 日韩久久久久久久久久久| 你懂的网址国产 欧美| 51午夜精品| 七七成人影院| 亚洲成年人在线| 日韩精品视频播放| 久久综合精品国产一区二区三区 | 免费av在线一区二区| 日韩伦理在线| 亚洲最新av网址| 亚洲天堂国产精品| 亚洲日本中文字幕区| 自拍视频第一页| 伊人狠狠色j香婷婷综合| 精品视频第一区| 综合在线影院| 最好看的2019的中文字幕视频| 夜夜爽8888| 一区二区三区色| 三叶草欧洲码在线| 国产一级久久| 亚洲免费在线精品一区| 国产日韩在线观看视频| 国内精品久久久久久久| 免费a级毛片在线观看| 欧美欧美欧美欧美| 国产精品二区一区二区aⅴ| 久久蜜桃香蕉精品一区二区三区| 五月婷婷激情久久| 午夜久久福利| 九色综合婷婷综合| 一区在线不卡| 国语自产精品视频在线看| 国产黄色在线播放| 日韩写真欧美这视频| 成人免费区一区二区三区| 国产日本欧洲亚洲| 亚洲午夜精品在线观看| 美女国产一区| 中文字幕精品—区二区日日骚| 深夜福利一区| 国产成人一区二区三区小说| 米奇精品一区二区三区| 亚洲国产欧美日韩精品| 在线观看中文字幕码| 亚洲国产精品久久不卡毛片| 亚洲精品视频网址| 国产91色综合久久免费分享| 日本老熟妇毛茸茸| 伊人狠狠色j香婷婷综合| 一区不卡字幕| 亚洲桃色综合影院| 91丝袜脚交足在线播放| 深夜视频一区二区| 国内久久久精品| 麻豆免费在线观看| 国产丝袜一区视频在线观看| 国产黄a三级三级三级| 日本福利一区二区| 国产黄色片视频| 18涩涩午夜精品.www| 性欧美13一14内谢| 国产91精品精华液一区二区三区| 亚洲综合欧美在线| 亚洲在线播放| av无码久久久久久不卡网站| 天堂在线中文在线| 欧美日韩五码| 欧美精品国产精品日韩精品| 午夜伦全在线观看| 亚洲人成免费电影| 免费观看国产视频| 91.com视频| 无码久久精品国产亚洲av影片| 亚洲成人av一区| 97成人资源站| 国产精品热久久久久夜色精品三区| 亚洲精品中文字幕在线播放| 国产91丝袜在线观看| 97超碰人人看| 激情六月婷婷久久| 亚洲综合日韩欧美| 三级一区在线视频先锋| 国产97在线 | 亚洲| 激情成人综合| 国产爆乳无码一区二区麻豆| 一个色综合网| 自拍亚洲欧美老师丝袜| 色无极亚洲影院| 日韩精品伦理第一区| 伊人久久大香线蕉无限次| 国产日产精品一区二区三区四区| 中文字幕一区日韩精品| 亚洲综合色av| 美女精品久久| 99久久无色码| 精品国内亚洲2022精品成人| 99久久久精品免费观看国产 | 永久免费看mv网站入口78| av电影天堂一区二区在线观看| 日韩女优在线视频| aa级大片欧美| 黄色国产在线观看| 久久九九久精品国产免费直播| 国产美女精品久久| 国产夜色精品一区二区av| av电影网站在线观看| 国产欧美日韩一区二区三区在线观看| 成人性生交大片免费看无遮挡aⅴ| 国产午夜精品福利| 亚洲综合久久av一区二区三区| 国产精品国产馆在线真实露脸| 日本黄色录像视频| 亚洲精品中文在线影院| 日本免费一二三区| 色一情一伦一子一伦一区| 中文字幕乱码一区二区| 欧美蜜桃一区二区三区| 亚洲精品国产一区二| 亚洲精品网址在线观看| av电影在线播放高清免费观看| 久久伊人精品视频| 国产传媒在线观看| 国产精品久久久久久久一区探花 | 欧美日韩国产美女| 精品二区在线观看| 日韩精品中文字| 日韩子在线观看| 欧美激情精品久久久久久变态| 91jq激情在线观看| 国产精品久久久久秋霞鲁丝 | 久久99精品久久久久久水蜜桃 | 国产一区二区三区在线观看网站| 亚洲成人影院麻豆| 久久久久久亚洲精品| 色婷婷综合久久久中字幕精品久久| 国产精品一区二区久久| 大伊香蕉精品在线品播放| 日韩精品久久一区二区三区| 欧美日韩亚洲一区在线观看| 青青草原av在线播放| 韩国三级在线一区| 双性尿奴穿贞c带憋尿| 亚洲日本在线视频观看| 欧美超碰在线观看| 日韩你懂的在线观看| 国产精品四虎| 国内偷自视频区视频综合| 小说区图片区亚洲| 久久精品日产第一区二区三区精品版| 日韩综合一区| 日本免费黄视频| 国产乱人伦偷精品视频不卡| 真实乱视频国产免费观看| 亚洲一区二区三区影院| 一区二区三区黄| 国产丝袜一区视频在线观看 | 国产精品成人一区| 成人资源在线| 日韩视频在线观看视频| 久久综合影视| 亚洲欧美日本一区| 一区二区在线观看不卡| 亚洲一级特黄毛片| 精品视频久久久久久| 日本色护士高潮视频在线观看| 国产精品丝袜久久久久久不卡| 日韩精品导航| 野外做受又硬又粗又大视频√| 精品一区二区av| 国产人妻大战黑人20p| 精品动漫一区二区| 亚洲国产精品久久久久久久| 日韩视频第一页| 亚洲成人激情社区| 欧美日韩亚洲在线| 亚洲一区二区三区高清| 国产国语老龄妇女a片| 综合中文字幕亚洲| 亚洲无码久久久久| 中文字幕亚洲一区在线观看| 主播大秀视频在线观看一区二区| 久久波多野结衣| 99日韩精品| 性欧美18—19sex性高清| 樱花影视一区二区| 国产丰满果冻videossex| www.欧美三级电影.com| 日韩欧国产精品一区综合无码| 日本公妇乱淫免费视频一区三区| 久久精品人人做人人爽电影蜜月| 亚洲精品女人久久久| 福利一区福利二区微拍刺激| 三级在线视频| 日本精品视频在线观看| 亚洲第一福利社区| 成人小视频在线看| 国产亚洲福利社区一区| 涩涩视频在线观看| 中文字幕日韩在线播放| 国产精品成人国产| 自拍视频一区二区三区| 国产高清久久久| 久久久久久久久久99| 亚洲精品不卡在线| 一级毛片久久久| 日韩理论片在线观看| 美女视频网站久久| 永久免费未视频| 日韩美女视频一区二区在线观看| 欧美高清另类hdvideosexjaⅴ| 国产一区精品在线| 久久久青草婷婷精品综合日韩 | 一区二区在线看| 深夜福利视频网站| 欧美专区日韩视频| 精品一区二区三区在线| 国内国产精品天干天干| 亚洲黄色录像片| 色呦呦免费观看| 国产999精品| 国产精品久久久久久影院8一贰佰| 亚洲一二三不卡| 图片区小说区区亚洲影院| 国模精品一区二区| 91美女片黄在线观| 91久久中文| 国产精品视频在| 精品国产一区二区亚洲人成毛片| 成人免费图片免费观看| 性欧美videosex高清少妇| 国产高清亚洲一区| 久久久免费高清视频| 精品国产一区久久久| 国产精品玖玖玖在线资源| 国产91美女视频| 日韩一区欧美一区| 亚洲 欧美 激情 小说 另类| 国产精品午夜国产小视频| 精品二区视频| 精品少妇一区二区三区密爱| 亚洲成人aaa| 国产精品亲子伦av一区二区三区| 国产视频在线观看网站| 国产日本亚洲高清| 亚洲精品久久久蜜桃动漫| 国产精品盗摄久久久| 日韩五码在线| 国产精品视频看看|