17 位谷歌 Android 開(kāi)發(fā)專家是如何看待 Kotlin 的?

譯者簡(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á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

MacHi 2017-05-29 21-18-37.png

我以前使用 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)。最明顯的是它的類型系統(tǒng)和對(duì)空類型的處理,這迫使你在編碼時(shí)指明哪些變量可為空,并在使用的時(shí)候遵循這個(gè)約定,之后編譯器就會(huì)介入并確保對(duì)變量的賦值都是有效的。空指針異常[3]是我在 Android 應(yīng)用程序中處理的最常見(jiàn)的異常類型。Kotlin 有助于公平的競(jìng)爭(zhēng)環(huán)境。

Kotlin 另外一個(gè)顯著的優(yōu)點(diǎn)是具備擴(kuò)展函數(shù)[4]的能力,通過(guò)給 ContextActivityDate 類添加擴(kuò)展函數(shù),使得我的代碼簡(jiǎn)潔了很多,同時(shí)變得更加易于閱讀。

通過(guò)使用 Kotlin,我的代碼變得更好了。

2. Sebastiano Poggi

MacHi 2017-05-30 20-34-13.png

我真的真的很喜歡這門(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

MacHi 2017-05-30 20-35-12.png

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

MacHi 2017-05-30 20-37-01.png

Kotlin 是極好的,我喜歡它,它是 Android 世界的一股清流

5. Mark Allison

MacHi 2017-05-30 20-38-21.png

雖然我也很喜歡 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

MacHi 2017-05-30 20-40-43.png

我完全迷上了 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

MacHi 2017-05-30 20-30-19.png

對(duì)于那些停留在 Android 世界的開(kāi)發(fā)者而言,Kotlin 是一個(gè)真正的規(guī)則改變者,它擁有很多我喜歡的特性:空類型安全,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

MacHi 2017-05-30 20-31-26.png

我曾經(jīng)使用過(guò)像 Haskell 和 Elixir 這樣的語(yǔ)言進(jìn)行編碼,因此當(dāng)我進(jìn)行 Android 開(kāi)發(fā)時(shí)時(shí)常在想:“為什么 Android 中不能有這樣好用的特性?”。

現(xiàn)在使用 Kotlin,我們可以做到了。

可選類型內(nèi)置在 Kotlin 的類型系統(tǒng)中,函數(shù)是一級(jí)公民,類型匹配(某種程度上)和不可變類型等特性終于讓我在 Android 開(kāi)發(fā)中可以使用真正的函數(shù)式編程

9. David Vávra

MacHi 2017-05-30 20-31-50.png

在我的主要應(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

MacHi 2017-05-30 20-32-23.png

我認(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 之類的支持 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

MacHi 2017-05-30 20-41-30.png

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

MacHi 2017-05-29 16-27-07.png

大約一年前,我開(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ì)用到很多工具類。擴(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

MacHi 2017-05-29 14-30-30.png

從一個(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

MacHi 2017-05-29 17-52-11.png

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)代替 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

MacHi 2017-05-29 18-27-28.png

Kotlin 為 Android 平臺(tái)帶來(lái)了新酷的概念,而不僅僅是使用另外一門(mén)語(yǔ)言來(lái)編寫(xiě)類和 activities。

我們此時(shí)正在將自動(dòng)化框架移植到 Kotlin 上,我們正在享受如何用聲明的方式定義自己的 DSL,并讓開(kāi)發(fā)和測(cè)試人員更流暢的編程測(cè)試代碼[14]

16. Dan Lew

MacHi 2017-05-29 18-33-52.png

在不犧牲性能或者安全性的前提下,Kotlin 相比 Java 能夠編寫(xiě)更加簡(jiǎn)潔易懂的代碼。Kotlin 最終編譯為字節(jié)碼,因此能夠表現(xiàn)的跟 Java 一樣好,它跟 Java 有一樣的編譯時(shí)檢查(同時(shí)具備 Java 沒(méi)有的內(nè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

MacHi 2017-05-29 18-59-34.png

我是作為一名 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 是如何克服像空類型這樣的具有明顯缺點(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 類進(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 類轉(zhuǎn)換為 Kotlin 類時(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)鍵概念例如空類型。Kotlin 其他吸引我注意的特性如下:

  • 空類型:告訴你公司的業(yè)務(wù)人員你可以避免產(chǎn)品中三分之二的異常,這將是一件令人心動(dòng)的事情。直到開(kāi)始使用 Kotlin,你才意識(shí)到在 Java 中沒(mé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)行類型判斷然后進(jìn)行類型轉(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)看,它將使你成為一名更好的程序員。


  1. https://developers.google.com/experts/all/technology/android ?

  2. https://antonioleiva.com/kotlin ?

  3. https://antonioleiva.com/nullity-kotlin/ ?

  4. https://antonioleiva.com/kotlin-android-extensions/ ?

  5. https://antonioleiva.com/kotlin-integrations-android-sdk/ ?

  6. https://antonioleiva.com/data-classes-kotlin/ ?

  7. https://try.kotlinlang.org/ ?

  8. http://www.settleup.info/ ?

  9. https://antonioleiva.com/classes-kotlin/ ?

  10. https://antonioleiva.com/create-first-android-project-kotlin/ ?

  11. http://kotlinlang.org/docs/tutorials/koans.html ?

  12. https://antonioleiva.com/google-kotlin/kotlin-android-developers-book/ ?

  13. https://antonioleiva.com/kotlin-android-extensions/ ?

  14. https://antonioleiva.com/unit-tests-android-kotlin/ ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容