譯者簡(jiǎn)介:ASCE1885哄啄, 《Android 高級(jí)進(jìn)階》作者雅任。
原文鏈接:https://antonioleiva.com/google-kotlin/禽车, 由于 Markdown 對(duì)圖片的排版存在限制,因此為了保證排版的美觀刊殉,本文對(duì)作者介紹部分進(jìn)行截圖哭当,不做另外的翻譯。
Google 已經(jīng)多次表達(dá)過(guò)他們不反對(duì) Kotlin 的使用冗澈,只要 Kotlin 編譯器依然生成有效的字節(jié)碼,那么 Google 就不會(huì)阻止任何人使用它陋葡。
但很多人依然在等待官方的正式支持亚亲,一件可能永遠(yuǎn)不會(huì)發(fā)生的事情。
雖然我們等到了這一刻腐缤,但我想如果能夠知道 Google 的 Android 開(kāi)發(fā)專家是如何看待 Kotlin 的捌归,那就更好了。
如果你沒(méi)有聽(tīng)說(shuō)過(guò)岭粤,那你應(yīng)該了解下惜索,Google 開(kāi)發(fā)專家(GDEs)[1]是一個(gè)旨在表彰優(yōu)秀開(kāi)發(fā)者對(duì)所在領(lǐng)域所作出的貢獻(xiàn)的項(xiàng)目。
我聯(lián)系了一些這樣的 Android 專家(人員列表很長(zhǎng)L杲健)巾兆,我得到了來(lái)自 17 位的答復(fù)猎物。非常感謝你們這么好能夠花時(shí)間來(lái)回答。
我只是要求他們告訴我們關(guān)于 Kotlin[2] 的一點(diǎn)想法角塑,答案顯然是未經(jīng)過(guò)修改的蔫磨,所以你可以發(fā)現(xiàn)支持和反對(duì)(或者不那么支持)的聲音。
我希望這有助于你知道 Kotlin 是如何成為一個(gè)游戲規(guī)則改變者的圃伶,同時(shí)如果你是一名 Android 開(kāi)發(fā)者堤如,我希望 Kotlin 會(huì)成為你考慮使用的一門(mén)語(yǔ)言。
其他的就不多說(shuō)的窒朋,讓我們來(lái)看看 GDEs 們的看法吧搀罢,排名不分先后:
1. Annyce Davis
我以前使用 Groovy 編程語(yǔ)言開(kāi)發(fā)過(guò) Grails 應(yīng)用,對(duì)于我而言侥猩,Groovy 是對(duì) Java 一個(gè)極大的改進(jìn)榔至。它很精簡(jiǎn),并有助于避免當(dāng)時(shí)使用 Java 6 語(yǔ)言編碼時(shí)不得不遇到的很多樣板代碼拭宁。當(dāng) Kotlin 出現(xiàn)時(shí)洛退,我立刻被它吸引了,因?yàn)樗暮芏嗾Z(yǔ)法特性讓我想起了 Groovy杰标。它既整潔又精煉兵怯。
我是一個(gè)狂熱的學(xué)習(xí)者,所以我渴望學(xué)習(xí) Kotlin 并基于 Kotlin Koans 開(kāi)始我的學(xué)習(xí)之路腔剂。我也訂購(gòu)了《Kotlin in Action》的早期訪問(wèn)版本媒区。當(dāng)聽(tīng)了 Hadi 的 Kotlin 播客后,我被推到了正視 Kotlin 的邊緣掸犬。當(dāng) Kotlin 1.1 發(fā)布后袜漩,我最終決定正視 Kotlin,并在我的線上應(yīng)用中引入 Kotlin湾碎。
對(duì)于 Android 開(kāi)發(fā)者而言宙攻,Kotlin 有很多優(yōu)點(diǎn)。最明顯的是它的類(lèi)型系統(tǒng)和對(duì)空類(lèi)型的處理介褥,這迫使你在編碼時(shí)指明哪些變量可為空座掘,并在使用的時(shí)候遵循這個(gè)約定,之后編譯器就會(huì)介入并確保對(duì)變量的賦值都是有效的柔滔∫缗悖空指針異常[3]是我在 Android 應(yīng)用程序中處理的最常見(jiàn)的異常類(lèi)型。Kotlin 有助于公平的競(jìng)爭(zhēng)環(huán)境睛廊。
Kotlin 另外一個(gè)顯著的優(yōu)點(diǎn)是具備擴(kuò)展函數(shù)[4]的能力形真,通過(guò)給 Context
,Activity
和 Date
類(lèi)添加擴(kuò)展函數(shù)超全,使得我的代碼簡(jiǎn)潔了很多咆霜,同時(shí)變得更加易于閱讀邓馒。
通過(guò)使用 Kotlin,我的代碼變得更好了裕便。
2. Sebastiano Poggi
我真的真的很喜歡這門(mén)語(yǔ)言绒净。我個(gè)人認(rèn)為它在很多情況下使得編碼變成一件愉快的事情,相比之前偿衰,同樣的情況下用 Java 語(yǔ)言編碼將會(huì)感到痛苦和繁瑣挂疆。我絕不是一個(gè) Kotlin 專家,因?yàn)槲疫€沒(méi)有在日常工作中使用它下翎,但每次做小項(xiàng)目時(shí)我都會(huì)使用它缤言。你知道傳說(shuō)中的 10 倍效率的開(kāi)發(fā)者嗎?Kotlin 有時(shí)讓我覺(jué)得自己就像一個(gè) 10 倍效率開(kāi)發(fā)者(我一直不認(rèn)為有人能夠稱為 10 倍效率的開(kāi)發(fā)者视事,所以這對(duì)我來(lái)說(shuō)是一個(gè)好的開(kāi)始)胆萧。
簡(jiǎn)潔的語(yǔ)法是這門(mén)語(yǔ)言非常明顯的好處,除此之外俐东,我真的很感激它提供的所有附加的 API 和圍繞它構(gòu)建的生態(tài)系統(tǒng)跌穗。例如,不可變集合是我經(jīng)常需要的東西虏辫,但如果不在應(yīng)用中(部分)引入 Guava 函數(shù)庫(kù)的話蚌吸,在 Java 語(yǔ)言中是用不了的,但 Kotlin 對(duì)不可變集合提供了一級(jí)實(shí)現(xiàn)砌庄,此外還有一堆的其他特性羹唠。哦,我說(shuō)過(guò)當(dāng)看到 Kotlin
的發(fā)布版本將對(duì) LLVM 的支持作為一個(gè)目標(biāo)時(shí)娄昆,我有多興奮嗎佩微?
然而正如我剛才提到的,我的日常工作并沒(méi)有使用 Kotlin萌焰。雖然有理由相信 Kotlin 的引入將會(huì)使項(xiàng)目大大受益哺眯,但這個(gè)項(xiàng)目卻很難引入 Kotlin,因?yàn)檫@個(gè)項(xiàng)目的團(tuán)隊(duì)規(guī)模很大扒俯,我苦惱的發(fā)現(xiàn) Kotlin 存在的主要問(wèn)題:靜態(tài)代碼分析工具的缺乏和成熟設(shè)計(jì)模式的缺乏族购。
如果你的項(xiàng)目不大且不復(fù)雜,那么后者是一個(gè)相對(duì)次要的問(wèn)題陵珍,但如果你遇到的是有十個(gè)開(kāi)發(fā)者在一個(gè)有將近十年歷史的巨大的代碼倉(cāng)庫(kù)中協(xié)同工作時(shí),具有良好的設(shè)計(jì)模式將會(huì)使你更加的安心违施。當(dāng)然互纯,你可以使用 Java 設(shè)計(jì)模式,但并不是所有的 Java 設(shè)計(jì)模式在 Kotlin 中都是有意義的磕蒲,因?yàn)橛行┰O(shè)計(jì)模式是專門(mén)圍繞 Java 語(yǔ)言設(shè)計(jì)的留潦,存在一定的局限性只盹。這是一個(gè)漫長(zhǎng)的討論,我將在這里中止它兔院,否則整篇文章就變成這個(gè)討論了??殖卑。
對(duì)我來(lái)說(shuō),前面提到的第一個(gè)問(wèn)題是最關(guān)鍵的坊萝,也是真正決定我是否在項(xiàng)目中采用 Kotlin 的關(guān)鍵孵稽。你在項(xiàng)目實(shí)踐中使用不了 PMD,Checkstyle十偶,F(xiàn)indbugs 和其他的靜態(tài)代碼檢查工具(還沒(méi)有試過(guò) Errorprone)的事實(shí)菩鲜,將使你的項(xiàng)目陷入非常危險(xiǎn)的處境。首先惦积,如果項(xiàng)目中有超過(guò) 3~4 位開(kāi)發(fā)者接校,你不能指望在代碼風(fēng)格上面能夠嚴(yán)格監(jiān)督;更重要的狮崩,你缺少很多從上述工具中獲得的深入的 bug 檢查功能蛛勉。如果你從來(lái)沒(méi)有(正確的)使用過(guò)靜態(tài)代碼檢查工具,那么請(qǐng)舉手睦柴,我當(dāng)然不相信你诽凌!我知道現(xiàn)在有 IDE 的檢查,但那些功能還遠(yuǎn)不夠強(qiáng)大爱只;也有幾個(gè)項(xiàng)目為 Kotlin 帶來(lái)了靜態(tài)代碼分析的能力皿淋,但它們還不值得讓我們依賴。我真的很期待看到它們變得足夠成熟恬试,我們最終可以放心的使用它們窝趣。
在這期間,我在小的代碼倉(cāng)庫(kù)上面使用 Kotlin训柴,我喜歡它??哑舒。
3. Jorge Barroso
Kotlin 邁出了 Android 開(kāi)發(fā)的一大步,在這之前幻馁,Android 缺少 Kotlin 所帶來(lái)的特性洗鸵,相比于其他的 Java 平臺(tái),Android 平臺(tái)的 Java 開(kāi)發(fā)有些過(guò)時(shí)仗嗦,即使現(xiàn)在有在推動(dòng) Java 8膘滨,但它還是不會(huì)變成我們喜歡的現(xiàn)代編程語(yǔ)言。
現(xiàn)在我看到的一個(gè)最大的問(wèn)題是它的推廣稀拐,說(shuō)服公司轉(zhuǎn)型到 Kotlin 并展示它的價(jià)值很困難火邓。對(duì)于技術(shù)型公司而言會(huì)相對(duì)簡(jiǎn)單,因?yàn)閷?duì)于開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)激勵(lì)和挑戰(zhàn),但對(duì)于小公司來(lái)說(shuō)更困難铲咨。此外躲胳,很多公司擔(dān)心如果沒(méi)有 Google 在背后支持 Kotlin 的話,將很難被廣泛使用纤勒。
我喜歡這門(mén)語(yǔ)言以及它對(duì)生態(tài)系統(tǒng)的貢獻(xiàn)坯苹,我希望能夠在我的日常生活中更多地使用它,但我所從事的項(xiàng)目的性質(zhì)不允許這樣做摇天。我鼓勵(lì)大家都去看一下粹湃,但不限于 Kotlin,可能是另外一門(mén)語(yǔ)言闸翅,因?yàn)檫@會(huì)為他們打開(kāi)一個(gè)新的視野再芋,同時(shí)也是編寫(xiě)軟件時(shí)非常有用的學(xué)習(xí)。
4. Donn Felker
Kotlin 是極好的坚冀,我喜歡它济赎,它是 Android 世界的一股清流。
5. Mark Allison
雖然我也很喜歡 Kotlin记某,但我不認(rèn)為它已經(jīng)足夠成熟到能夠在線上產(chǎn)品中使用司训。成熟模式和最佳實(shí)踐的缺乏,使得 Kotlin 編寫(xiě)的代碼可能難以維護(hù)液南。
從 Kotlin 缺乏靜態(tài)代碼分析工具可以看出來(lái)壳猜。雖然 Java 的靜態(tài)代碼分析工具不完美,但它們可以作為衡量技術(shù)債務(wù)的好指標(biāo)滑凉。Java 工具不能用于 Kotlin统扳,因?yàn)樗鼈儗iT(mén)分析的是 Java 語(yǔ)言源碼。
6. Huyen Tue Dao
我完全迷上了 Kotlin畅姊。工作中我們 100% 的使用 Kotlin 進(jìn)行編碼咒钟,包含線上產(chǎn)品的代碼。事實(shí)上若未,無(wú)論何時(shí)何地只要能夠使用 Kotlin 的地方我都會(huì)使用 Kotlin 進(jìn)行編碼朱嘴,歸功于 Kotlin 和 Java 的可互操作性[5],幾乎可以說(shuō)任何地方都可以使用 Kotlin粗合。我可以訪問(wèn)系統(tǒng)平臺(tái) API 和其他已經(jīng)存在的代碼和函數(shù)庫(kù)萍嬉,同時(shí)享受和利用 Kotlin 所帶來(lái)的所有現(xiàn)代編程語(yǔ)言特性。
由于 Kotlin 是一門(mén)新語(yǔ)言隙疚,我們都在發(fā)現(xiàn)和定義最佳實(shí)踐的過(guò)程中壤追,我不得不同時(shí)從高級(jí)和低級(jí)兩個(gè)層面仔細(xì)檢查每一行代碼的影響。這很有趣供屉,迫使我更加謹(jǐn)慎和認(rèn)真的作出某些決定行冰。
這門(mén)語(yǔ)言的簡(jiǎn)潔令人驚嘆捅厂。我喜歡 Android,但我們需要處理很多樣板代碼资柔,Kotlin 有助于減少一些樣板代碼的編寫(xiě)。雖然太多的精簡(jiǎn)可能導(dǎo)致代碼可讀性的問(wèn)題撵割,我認(rèn)為大多數(shù)時(shí)候 Kotlin 實(shí)際上提高了代碼可讀性贿堰,只要我們不要太瘋狂,并記住我們想要什么樣的最佳實(shí)踐啡彬。
7. Dmytro Danylyk
對(duì)于那些停留在 Android 世界的開(kāi)發(fā)者而言羹与,Kotlin 是一個(gè)真正的規(guī)則改變者,它擁有很多我喜歡的特性:空類(lèi)型安全庶灿,data classes[6]纵搁,屬性和懶加載屬性,擴(kuò)展函數(shù)往踢,協(xié)程腾誉,不變性等等。
我很享受使用 Koltin 來(lái)編碼峻呕,因?yàn)?strong>我沒(méi)有必要在項(xiàng)目中引入太多的第三方庫(kù)利职,Kotlin 已經(jīng)非常好的提供了大部分的支持。
歸功于 JetBrains瘦癌,Kotlin 有很棒的 IDE 支持以及非常多的學(xué)習(xí)資料猪贪,甚至有在線的 REPL[7]。
8. Anup Cowkur
我曾經(jīng)使用過(guò)像 Haskell 和 Elixir 這樣的語(yǔ)言進(jìn)行編碼讯私,因此當(dāng)我進(jìn)行 Android 開(kāi)發(fā)時(shí)時(shí)常在想:“為什么 Android 中不能有這樣好用的特性热押?”。
現(xiàn)在使用 Kotlin斤寇,我們可以做到了桶癣。
可選類(lèi)型內(nèi)置在 Kotlin 的類(lèi)型系統(tǒng)中,函數(shù)是一級(jí)公民抡驼,類(lèi)型匹配(某種程度上)和不可變類(lèi)型等特性終于讓我在 Android 開(kāi)發(fā)中可以使用真正的函數(shù)式編程鬼廓。
9. David Vávra
在我的主要應(yīng)用(Settle Up[8])的生產(chǎn)環(huán)境中我使用了 Kotlin,它已經(jīng)足夠成熟致盟,而且相比 Java(任何版本) 有很多的優(yōu)點(diǎn)[9]碎税。Kotlin 完全兼容現(xiàn)有的 Java 工具和函數(shù)庫(kù),同時(shí)能夠很好的在 Android Studio 中使用馏锡。
如果現(xiàn)在新創(chuàng)建一個(gè) APP[10]雷蹂,我肯定會(huì)選擇 Kotlin。最常見(jiàn)的反面論點(diǎn)是:“但是還不熟悉 Kotlin 的同事會(huì)抱怨而且會(huì)降低開(kāi)發(fā)效率”杯道。這一點(diǎn)我是不同意的匪煌,從 Java 轉(zhuǎn)到 Kotlin 真的不需要費(fèi)多大勁,而它的優(yōu)點(diǎn)會(huì)很快呈現(xiàn)出來(lái)。相比之下萎庭,剛開(kāi)始使用 RxJava 將會(huì)感覺(jué)困難得多霜医。
對(duì)于移植現(xiàn)有 APP 而言,是否使用 Kotlin 需要根據(jù)具體情況而定驳规。例如你可以只在一個(gè)頁(yè)面使用 Kotlin肴敛,但如果想 100% 發(fā)揮這門(mén)語(yǔ)言的優(yōu)點(diǎn),那最好是全面轉(zhuǎn)到 Kotlin吗购。當(dāng)然這一點(diǎn)我們很難向項(xiàng)目負(fù)責(zé)人去證明医男。
Kotlin 現(xiàn)在唯一需要的僅僅是 Google 的官方認(rèn)可,Google 不需要做其他任何事情捻勉,只需要在官方文檔中增加 Kotlin 版本的代碼片段(像對(duì) Swift/ObjectiveC 所做的那樣)镀梭。如果官方認(rèn)可 Kotlin,那么我們將會(huì)看到 Koltin 成為大部分人的主要選擇踱启,祈求在今年的 Google I/O 大會(huì)上變成現(xiàn)實(shí)报账。
10. César Valiente
我認(rèn)為 Kotlin 是一門(mén)非常棒的現(xiàn)代編程語(yǔ)言。
它的學(xué)習(xí)曲線很平緩禽捆,你可能只需要花一天時(shí)間來(lái)學(xué)習(xí)它的語(yǔ)法笙什,就可以用 Kotlin 寫(xiě)出一些代碼,實(shí)現(xiàn)某些功能胚想。Kotlin 寫(xiě)起來(lái)真的很過(guò)癮琐凭,很好玩,而且很簡(jiǎn)潔浊服,它具備其他現(xiàn)代語(yǔ)言的特性统屈,它由 JetBrains 這樣很專業(yè)的團(tuán)隊(duì)進(jìn)行持續(xù)的開(kāi)發(fā),同時(shí)一直有社區(qū)的支持牙躺,因?yàn)?strong>它是開(kāi)源的愁憔!
這里我不想花時(shí)間介紹 Kotlin 的那些解放開(kāi)發(fā)者的特性,因?yàn)楣俜轿臋n已經(jīng)做了很好的說(shuō)明孽拷,同時(shí)我們可以在 IDE 或者 Web 頁(yè)面中使用 Koans[11] 來(lái)進(jìn)行練習(xí)吨掌,Kotlin 社區(qū)也在不斷的發(fā)布者新的激動(dòng)人心的內(nèi)容。
在 Android 平臺(tái)脓恕,Kotlin 給我們 Android 開(kāi)發(fā)者帶來(lái)一股清流膜宋,給了我們一個(gè)新的理由來(lái)享受編寫(xiě) APP,使用 Kotlin 你可以編寫(xiě)更少的代碼炼幔,最重要的是在一天結(jié)束時(shí)秋茫,你的代碼可讀性更強(qiáng),樣板代碼更少乃秀,而且由于編寫(xiě)同樣的代碼所花費(fèi)的時(shí)間更少肛著,你將變得更有生產(chǎn)力圆兵,正如我前面說(shuō)過(guò)的,使用 Kotlin 你會(huì)很開(kāi)心枢贿!
至少在 Android 社區(qū)殉农,有一個(gè)問(wèn)題懸而未決:kotlin 已經(jīng)準(zhǔn)備好應(yīng)用在線上產(chǎn)品了嗎?我的回答是當(dāng)然局荚,JetBrains 去年就已經(jīng)發(fā)布 1.0 的穩(wěn)定版本统抬。
你覺(jué)得如果沒(méi)有為線上產(chǎn)品準(zhǔn)備好的話 JetBrains 的聰明家伙們會(huì)正式發(fā)布它嗎?當(dāng)然不會(huì)危队。Kotlin 已經(jīng)用在了 JetBrains 的一些產(chǎn)品中,其他公認(rèn)的偉大的公司也在線上產(chǎn)品中使用了 Kotlin钙畔。
好的茫陆,一切聽(tīng)起來(lái)不錯(cuò),但應(yīng)該也有一些不好的地方吧擎析?沒(méi)錯(cuò)簿盅,Kotlin 社區(qū)等待的事情之一是工具的支持。當(dāng)你在一個(gè)團(tuán)隊(duì)工作時(shí)揍魂,靜態(tài)代碼分析工具是非常重要的桨醋。在 Kotlin 中我們?nèi)匀挥兴啡保?dāng)然你可以對(duì) Kotlin 工程進(jìn)行構(gòu)建现斋,運(yùn)行測(cè)試等喜最,這些基礎(chǔ)的功能還是有的,但像 CheckStyle庄蹋,PMD瞬内,F(xiàn)indBugs 之類(lèi)的支持 Java 語(yǔ)言的工具非常重要,在 Kotlin 中還不支持(好吧限书,在 IntelliJ 中內(nèi)置支持代碼分析虫蝶,但這是不夠的)。
所以倦西,如果你在一個(gè)大團(tuán)隊(duì)中工作能真,靜態(tài)分析工具在你的日常工作中是非常重要的(理應(yīng)如此),你需要對(duì)這一點(diǎn)多加考慮扰柠。如果你在一個(gè)小團(tuán)隊(duì)中工作粉铐,那么你可以控制所有事情的發(fā)展(譯者注:包括使用 Kotlin)。
總的來(lái)說(shuō)耻矮,Kotlin 是偉大的秦躯,使用 Kotlin 你將會(huì)擁有更多樂(lè)趣,同時(shí)工作也更高效(至少比用 Java 開(kāi)發(fā) Android 強(qiáng))裆装,雖然還有關(guān)于靜態(tài)代碼分析工具的一些問(wèn)題踱承,但如果你能夠不使用這些工具倡缠,那么去嘗試 Kotlin 吧,你會(huì)愛(ài)上它的茎活!??
11. Nelson Glauber
Kotlin 是一門(mén)令人印象深刻的語(yǔ)言昙沦,該語(yǔ)言的特性是驚人的,它移除了 Java 語(yǔ)言所需的一堆樣板代碼载荔。更不用說(shuō)市面上絕大多數(shù)函數(shù)庫(kù)(用 Java 語(yǔ)言編寫(xiě))完全兼容 Kotlin 的事實(shí)盾饮。另外一個(gè)使得該語(yǔ)言易于采用的是它和 Android Studio 的完美和穩(wěn)定的兼容。
對(duì)于 Java/Android 開(kāi)發(fā)者(新手可能未必如此)而言學(xué)習(xí)曲線很緩和懒熙。我從去年開(kāi)始通過(guò)閱讀 Antonio 的書(shū)[12](順便說(shuō)一句丘损,這本書(shū)很棒)來(lái)學(xué)習(xí) Kotlin,從那以后工扎,我一直在我的個(gè)人項(xiàng)目和演講中使用這門(mén)語(yǔ)言徘钥。
不幸的是,我還沒(méi)有機(jī)會(huì)在線上產(chǎn)品中使用它肢娘,但我毫不懷疑 Kotlin 已經(jīng)成熟到足以在大型項(xiàng)目中有效的使用呈础。
在我看來(lái),不使用 Kotlin 的唯一理由是橱健,一旦你開(kāi)始用 Kotlin 進(jìn)行編碼而钞,你將不想再使用 Java 進(jìn)行編碼??。
12. Ryan Harter
大約一年前拘荡,我開(kāi)始用 Kotlin 來(lái)編寫(xiě)所有的新代碼臼节,經(jīng)過(guò)一些嘗試,我發(fā)現(xiàn)它是穩(wěn)定的珊皿,而且這門(mén)語(yǔ)言提供的若干特性所帶來(lái)的好處值得我做這樣的轉(zhuǎn)換官疲。歸功于 Kotlin 和 Java 的可互操作性,任何我用 Kotlin 還不知道怎么實(shí)現(xiàn)的功能亮隙,我可以回退到使用 Java 來(lái)實(shí)現(xiàn)途凫。
Kotlin 的擴(kuò)展函數(shù)語(yǔ)言特性最大程度上簡(jiǎn)化了我的工作流程,雖然這個(gè)特性很簡(jiǎn)單溢吻。在我的圖形相關(guān)工作中维费,需要做大量的數(shù)學(xué)和矩陣操作,也就是會(huì)用到很多工具類(lèi)促王。擴(kuò)展函數(shù)[13]極大的簡(jiǎn)化了代碼的編寫(xiě)犀盟,并使代碼更加的精煉。在原有的面向?qū)ο缶幊痰幕A(chǔ)上蝇狼,混合著對(duì)函數(shù)式編程的支持阅畴,使得工作更加的愉快。
對(duì)于正在考慮切換到 Kotlin 的開(kāi)發(fā)者迅耘,我的最大建議是記住 Kotlin 和 Java 并不是非此則彼的關(guān)系贱枣,相反监署,Kotlin 能夠很好的和現(xiàn)有的 Java 代碼協(xié)同工作,所以你可以一步一步的開(kāi)始嘗試使用 Kotlin纽哥。
13. Ubiratan Soares
從一個(gè)開(kāi)發(fā)者的經(jīng)驗(yàn)來(lái)看钠乏,Kotlin 是 Android 應(yīng)用開(kāi)發(fā)的未來(lái)。
Kotlin 對(duì) Android 開(kāi)發(fā)的影響和三年前 Grade 對(duì) Android 的影響非常相似春塌。作為 Android 開(kāi)發(fā)者社區(qū)晓避,我們應(yīng)該擁抱 Kotlin,傳播 Kotlin只壳,并讓一大批的開(kāi)發(fā)者來(lái)使用 Kotlin俏拱,因?yàn)槲覀冎档脫碛懈玫姆椒▉?lái)開(kāi)發(fā) APP,滿足用戶的需要并在工作中取得好成績(jī)吼句。
14. Philippe Breault
Kotlin 對(duì)于 Android 開(kāi)發(fā)者而言是一股清流彰触。
我喜歡它在 lambda 表達(dá)式上所做的工作,能夠讓編譯器內(nèi)聯(lián) lambda命辖,當(dāng)它起作用時(shí),允許我們 Android 開(kāi)發(fā)者在緊湊循環(huán)中使用它分蓖,這樣通扯В可以避免實(shí)例化新對(duì)象。
簡(jiǎn)單的特性當(dāng)然也很重要么鹤,例如表達(dá)式后面不需要加分號(hào)终娃;如果在同一行給一個(gè)變量賦值時(shí)不需要輸入兩次變量的類(lèi)型;使用屬性來(lái)代替 getters/setters 方法等等蒸甜。這些特性使得代碼閱讀更方便棠耕。
我唯一希望得到改進(jìn)的功能是 Android Gradle 插件和 Kotlin 插件的可互操作性。現(xiàn)階段柠新,兩者的混合使用經(jīng)常會(huì)出現(xiàn)問(wèn)題窍荧。
話雖如此,每個(gè) Android 開(kāi)發(fā)者都應(yīng)該對(duì)這門(mén)語(yǔ)言保持關(guān)注恨憎,最好是嘗試使用它蕊退。
15. I?aki Villar
Kotlin 為 Android 平臺(tái)帶來(lái)了新酷的概念,而不僅僅是使用另外一門(mén)語(yǔ)言來(lái)編寫(xiě)類(lèi)和 activities憔恳。
我們此時(shí)正在將自動(dòng)化框架移植到 Kotlin 上瓤荔,我們正在享受如何用聲明的方式定義自己的 DSL,并讓開(kāi)發(fā)和測(cè)試人員更流暢的編程測(cè)試代碼[14]钥组。
16. Dan Lew
在不犧牲性能或者安全性的前提下输硝,Kotlin 相比 Java 能夠編寫(xiě)更加簡(jiǎn)潔易懂的代碼。Kotlin 最終編譯為字節(jié)碼程梦,因此能夠表現(xiàn)的跟 Java 一樣好点把,它跟 Java 有一樣的編譯時(shí)檢查(同時(shí)具備 Java 沒(méi)有的內(nèi)建空類(lèi)型檢查)橘荠。更重要的,Kotlin 的語(yǔ)言特性和標(biāo)準(zhǔn)庫(kù)函數(shù)能夠編寫(xiě)簡(jiǎn)潔有效的代碼愉粤。
此外砾医,Kotlin 擁有強(qiáng)大的生態(tài)系統(tǒng)。當(dāng)然衣厘,來(lái)自 JetBrains 的原生工具支持是不錯(cuò)的如蚜,除此之外沽翔,這門(mén)語(yǔ)言正得到積極的支持和改進(jìn)骂澄,同時(shí)软能,JetBrains 在每次升級(jí) Kotlin 時(shí)并沒(méi)有做不兼容的修改蟹演。而且 Kotlin 可以和 Java 很好的相互協(xié)作片效,這使得從 Java 到 Kotlin 的轉(zhuǎn)變很容易响牛。
最后滥朱,作為一個(gè) Android 開(kāi)發(fā)者虱疏,我喜歡 Kotlin 還有另外一個(gè)重要的原因:Kotlin 能夠獨(dú)立于 Android 系統(tǒng)版本進(jìn)行升級(jí)妆兑。由于 Java 語(yǔ)言的能力是和 Android 操作系統(tǒng)綁定的魂拦,開(kāi)發(fā)者經(jīng)常會(huì)錯(cuò)過(guò) Java 新版本的語(yǔ)言特性和標(biāo)準(zhǔn)庫(kù) API。相比之下搁嗓,當(dāng) Kotlin 新版本發(fā)布時(shí)芯勘,你就可以開(kāi)始使用新版本的語(yǔ)言特性了。
17. Enrique López Ma?as
我是作為一名 Java 開(kāi)發(fā)者自然而然的過(guò)渡到 Android 開(kāi)發(fā)的腺逛,因?yàn)閮烧哒Z(yǔ)言是通用的荷愕,所以我決定試一下,這是一個(gè)充滿意義的選擇棍矛,就我個(gè)人而言安疗,這一年是在 2009 年。Java 誕生于 1995 年够委,從那時(shí)起到現(xiàn)在荐类,陸續(xù)發(fā)布了一些新版本,在原有語(yǔ)言特性的基礎(chǔ)上進(jìn)行新增和改進(jìn)茁帽,當(dāng)前的版本是 Java 8掉冶。Java 是 22 年前設(shè)計(jì)的,考慮到技術(shù)發(fā)展的速度脐雪,Java 算是一門(mén)不朽的語(yǔ)言厌小,同時(shí)目前它也有一些不容忽視的缺點(diǎn)。作為一個(gè)開(kāi)發(fā)者战秋,我經(jīng)常會(huì)嘗試其他語(yǔ)言璧亚。最明顯的解決了 Java 某些缺點(diǎn)的語(yǔ)言是 Scala。轉(zhuǎn)折點(diǎn)是我在實(shí)踐中看到了像 Swift 這樣的語(yǔ)言。我也在為 iOS 平臺(tái)編寫(xiě)代碼癣蟋,并注意到 Swift 是如何克服像空類(lèi)型這樣的具有明顯缺點(diǎn)的語(yǔ)言特性的透硝,從此打開(kāi)我在 Java 語(yǔ)言中一直以來(lái)忽略的很多問(wèn)題。
由于最初設(shè)計(jì)等本質(zhì)原因疯搅,Android 平臺(tái)原生支持所有 Java 7 的語(yǔ)言特性濒生,部分支持 Java 8 語(yǔ)言特性。相當(dāng)于 Android 平臺(tái)跟其他使用 Java 語(yǔ)言的平臺(tái)相比幔欧,落后了很多罪治。而 Kotlin 的出現(xiàn)填補(bǔ)了這個(gè)空缺。
Kotlin 是一門(mén)現(xiàn)代編程語(yǔ)言(1.0 版本是在 2016 年 2 月發(fā)布的)礁蔗。它最初的目標(biāo)是彌補(bǔ) Java 的缺點(diǎn)觉义,像 Scala 語(yǔ)言所做的那樣,但解決了一些存在的問(wèn)題(例如浴井,編譯時(shí)間)晒骇。
JetBrains 對(duì) Kotlin 作了了不起的優(yōu)化工作,在最近一個(gè)版本中 Kotlin 的編譯時(shí)間得到了顯著的提升磺浙。作為一個(gè) Kotlin 新手洪囤,下面是最初我想到的一些問(wèn)題的答案:
- 和 Java 的可互操作性:Kotlin 可以直接和 Java 類(lèi)進(jìn)行交互,當(dāng)然也有其他方式撕氧。最基礎(chǔ)的一點(diǎn):我確實(shí)想重用老的代碼倉(cāng)庫(kù)瘤缩,并引入 Kotlin。
- 轉(zhuǎn)換工具:雖然不能盲目的信任 Java 到 Kotlin 的自動(dòng)轉(zhuǎn)換呵曹,但這個(gè)功能確實(shí)很棒。當(dāng)我將 Java 類(lèi)轉(zhuǎn)換為 Kotlin 類(lèi)時(shí)何暮,我可以很容易的復(fù)用 60%~70% 的結(jié)果代碼奄喂。我的做法是不要一次性將整個(gè)代碼庫(kù)從 Java 轉(zhuǎn)換為 Kotlin,而是遵循小步迭代海洼。這樣審查轉(zhuǎn)換后的代碼所花的時(shí)間也會(huì)很少跨新。
回到 Kotlin 本身,在使用 Java 進(jìn)行多年的開(kāi)發(fā)后坏逢,嘗試使用 Kotlin 這種新鮮東西感覺(jué)很棒域帐。如果你是一名 Java 開(kāi)發(fā)者,Kotlin 的語(yǔ)法對(duì)你而言是非常自然的是整。如果你是一名 Swift 開(kāi)發(fā)者肖揣,也會(huì)有同樣的感覺(jué),而且你會(huì)很容易理解 Kotlin 的一些關(guān)鍵概念例如空類(lèi)型浮入。Kotlin 其他吸引我注意的特性如下:
- 空類(lèi)型:告訴你公司的業(yè)務(wù)人員你可以避免產(chǎn)品中三分之二的異常龙优,這將是一件令人心動(dòng)的事情。直到開(kāi)始使用 Kotlin事秀,你才意識(shí)到在 Java 中沒(méi)有空類(lèi)型是多么糟糕的一件事情彤断。
- 函數(shù)式編程:是的野舶,Kotlin 正如 Scala 一樣,支持函數(shù)式編程宰衙。
- 默認(rèn)和命名參數(shù):再次的平道,如果你之前沒(méi)有嘗試過(guò)這種特性,你將永遠(yuǎn)不會(huì)知道它的可貴之處供炼。在 Kotlin 中一屋,你可以為一個(gè)函數(shù)的參數(shù)設(shè)置默認(rèn)值,并為每個(gè)參數(shù)命名劲蜻。這成倍的增加代碼的可讀性和易讀性陆淀。
- 智能的強(qiáng)制轉(zhuǎn)換:厭倦了使用
instanceof
進(jìn)行類(lèi)型判斷然后進(jìn)行類(lèi)型轉(zhuǎn)換吧?它似乎總是非常多余的步驟先嬉,本應(yīng)該很容易防止的轧苫。Kotlin 自動(dòng)為你實(shí)現(xiàn)這些步驟。
Koltin 還有一堆的特性疫蔓,可能需要幾篇文章的篇幅來(lái)進(jìn)行列舉和深入介紹含懊。總結(jié)來(lái)說(shuō):Koltin 是一門(mén)用于補(bǔ)充和完善 Java 不足的語(yǔ)言衅胀。對(duì)于 Java 開(kāi)發(fā)者而言學(xué)習(xí)曲線很平緩岔乔。這不是一個(gè)非此即彼的問(wèn)題,因?yàn)槟憧梢栽谀愕?Java 代碼倉(cāng)庫(kù)中同時(shí)使用 Java 和 Kotlin滚躯。Kotlin 將會(huì)提高您的工作效率雏门,從中長(zhǎng)期來(lái)看,它將使你成為一名更好的程序員掸掏。