Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android資訊 >> 17 位谷歌 Android 開發專家是如何看待 Kotlin 的?

17 位谷歌 Android 開發專家是如何看待 Kotlin 的?

編輯:Android資訊

Google 已經多次表達過他們不反對 Kotlin 的使用,只要 Kotlin 編譯器依然生成有效的字節碼,那麼 Google 就不會阻止任何人使用它。

但很多人依然在等待官方的正式支持,一件可能永遠不會發生的事情。

雖然我們等到了這一刻,但我想如果能夠知道 Google 的 Android 開發專家是如何看待 Kotlin 的,那就更好了。

如果你沒有聽說過,那你應該了解下,Google 開發專家(GDEs)[1]是一個旨在表彰優秀開發者對所在領域所作出的貢獻的項目。

我聯系了一些這樣的 Android 專家(人員列表很長!),我得到了來自 17 位的答復。非常感謝你們這麼好能夠花時間來回答。

我只是要求他們告訴我們關於 Kotlin[2] 的一點想法,答案顯然是未經過修改的,所以你可以發現支持和反對(或者不那麼支持)的聲音。

我希望這有助於你知道 Kotlin 是如何成為一個游戲規則改變者的,同時如果你是一名 Android 開發者,我希望 Kotlin 會成為你考慮使用的一門語言。

其他的就不多說的,讓我們來看看 GDEs 們的看法吧,排名不分先後:

1. Annyce Davis

我以前使用 Groovy 編程語言開發過 Grails 應用,對於我而言,Groovy 是對 Java 一個極大的改進。它很精簡,並有助於避免當時使用 Java 6 語言編碼時不得不遇到的很多樣板代碼。當 Kotlin 出現時,我立刻被它吸引了,因為它的很多語法特性讓我想起了 Groovy。它既整潔又精煉。

我是一個狂熱的學習者,所以我渴望學習 Kotlin 並基於 Kotlin Koans 開始我的學習之路。我也訂購了《Kotlin in Action》的早期訪問版本。當聽了 Hadi 的 Kotlin 播客後,我被推到了正視 Kotlin 的邊緣。當 Kotlin 1.1 發布後,我最終決定正視 Kotlin,並在我的線上應用中引入 Kotlin。

對於 Android 開發者而言,Kotlin 有很多優點。最明顯的是它的類型系統和對空類型的處理,這迫使你在編碼時指明哪些變量可為空,並在使用的時候遵循這個約定,之後編譯器就會介入並確保對變量的賦值都是有效的。空指針異常[3]是我在 Android 應用程序中處理的最常見的異常類型。Kotlin 有助於公平的競爭環境。

Kotlin 另外一個顯著的優點是具備擴展函數[4]的能力,通過給 ContextActivity 和 Date 類添加擴展函數,使得我的代碼簡潔了很多,同時變得更加易於閱讀。

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

2. Sebastiano Poggi

我真的真的很喜歡這門語言。我個人認為它在很多情況下使得編碼變成一件愉快的事情,相比之前,同樣的情況下用 Java 語言編碼將會感到痛苦和繁瑣。我絕不是一個 Kotlin 專家,因為我還沒有在日常工作中使用它,但每次做小項目時我都會使用它。你知道傳說中的 10 倍效率的開發者嗎?Kotlin 有時讓我覺得自己就像一個 10 倍效率開發者(我一直不認為有人能夠稱為 10 倍效率的開發者,所以這對我來說是一個好的開始)。

簡潔的語法是這門語言非常明顯的好處,除此之外,我真的很感激它提供的所有附加的 API 和圍繞它構建的生態系統。例如,不可變集合是我經常需要的東西,但如果不在應用中(部分)引入 Guava 函數庫的話,在 Java 語言中是用不了的,但 Kotlin 對不可變集合提供了一級實現,此外還有一堆的其他特性。哦,我說過當看到 Kotlin的發布版本將對 LLVM 的支持作為一個目標時,我有多興奮嗎?

然而正如我剛才提到的,我的日常工作並沒有使用 Kotlin。雖然有理由相信 Kotlin 的引入將會使項目大大受益,但這個項目卻很難引入 Kotlin,因為這個項目的團隊規模很大,我苦惱的發現 Kotlin 存在的主要問題:靜態代碼分析工具的缺乏和成熟設計模式的缺乏。

如果你的項目不大且不復雜,那麼後者是一個相對次要的問題,但如果你遇到的是有十個開發者在一個有將近十年歷史的巨大的代碼倉庫中協同工作時,具有良好的設計模式將會使你更加的安心。當然,你可以使用 Java 設計模式,但並不是所有的 Java 設計模式在 Kotlin 中都是有意義的,因為有些設計模式是專門圍繞 Java 語言設計的,存在一定的局限性。這是一個漫長的討論,我將在這裡中止它,否則整篇文章就變成這個討論了。

對我來說,前面提到的第一個問題是最關鍵的,也是真正決定我是否在項目中采用 Kotlin 的關鍵。你在項目實踐中使用不了 PMD,Checkstyle,Findbugs 和其他的靜態代碼檢查工具(還沒有試過 Errorprone)的事實,將使你的項目陷入非常危險的處境。首先,如果項目中有超過 3~4 位開發者,你不能指望在代碼風格上面能夠嚴格監督;更重要的,你缺少很多從上述工具中獲得的深入的 bug 檢查功能。如果你從來沒有(正確的)使用過靜態代碼檢查工具,那麼請舉手,我當然不相信你!我知道現在有 IDE 的檢查,但那些功能還遠不夠強大;也有幾個項目為 Kotlin 帶來了靜態代碼分析的能力,但它們還不值得讓我們依賴。我真的很期待看到它們變得足夠成熟,我們最終可以放心的使用它們。

在這期間,我在小的代碼倉庫上面使用 Kotlin,我喜歡它。

3. Jorge Barroso

Kotlin 邁出了 Android 開發的一大步,在這之前,Android 缺少 Kotlin 所帶來的特性,相比於其他的 Java 平台,Android 平台的 Java 開發有些過時,即使現在有在推動 Java 8,但它還是不會變成我們喜歡的現代編程語言。

現在我看到的一個最大的問題是它的推廣,說服公司轉型到 Kotlin 並展示它的價值很困難。對於技術型公司而言會相對簡單,因為對於開發者來說是一個激勵和挑戰,但對於小公司來說更困難。此外,很多公司擔心如果沒有 Google 在背後支持 Kotlin 的話,將很難被廣泛使用。

我喜歡這門語言以及它對生態系統的貢獻,我希望能夠在我的日常生活中更多地使用它,但我所從事的項目的性質不允許這樣做。我鼓勵大家都去看一下,但不限於 Kotlin,可能是另外一門語言,因為這會為他們打開一個新的視野,同時也是編寫軟件時非常有用的學習。

4. Donn Felker

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

5. Mark Allison

雖然我也很喜歡 Kotlin,但我不認為它已經足夠成熟到能夠在線上產品中使用。成熟模式和最佳實踐的缺乏,使得 Kotlin 編寫的代碼可能難以維護。

從 Kotlin 缺乏靜態代碼分析工具可以看出來。雖然 Java 的靜態代碼分析工具不完美,但它們可以作為衡量技術債務的好指標。Java 工具不能用於 Kotlin,因為它們專門分析的是 Java 語言源碼。

6. Huyen Tue Dao

我完全迷上了 Kotlin。工作中我們 100% 的使用 Kotlin 進行編碼,包含線上產品的代碼。事實上,無論何時何地只要能夠使用 Kotlin 的地方我都會使用 Kotlin 進行編碼,歸功於 Kotlin 和 Java 的可互操作性[5],幾乎可以說任何地方都可以使用 Kotlin。我可以訪問系統平台 API 和其他已經存在的代碼和函數庫,同時享受和利用 Kotlin 所帶來的所有現代編程語言特性。

由於 Kotlin 是一門新語言,我們都在發現和定義最佳實踐的過程中,我不得不同時從高級和低級兩個層面仔細檢查每一行代碼的影響。這很有趣,迫使我更加謹慎和認真的作出某些決定。

這門語言的簡潔令人驚歎。我喜歡 Android,但我們需要處理很多樣板代碼,Kotlin 有助於減少一些樣板代碼的編寫。雖然太多的精簡可能導致代碼可讀性的問題,我認為大多數時候 Kotlin 實際上提高了代碼可讀性,只要我們不要太瘋狂,並記住我們想要什麼樣的最佳實踐。

7. Dmytro Danylyk

對於那些停留在 Android 世界的開發者而言,Kotlin 是一個真正的規則改變者,它擁有很多我喜歡的特性:空類型安全,data classes[6],屬性和懶加載屬性,擴展函數,協程,不變性等等。

我很享受使用 Koltin 來編碼,因為我沒有必要在項目中引入太多的第三方庫,Kotlin 已經非常好的提供了大部分的支持。

歸功於 JetBrains,Kotlin 有很棒的 IDE 支持以及非常多的學習資料,甚至有在線的 REPL[7]。

8. Anup Cowkur

我曾經使用過像 Haskell 和 Elixir 這樣的語言進行編碼,因此當我進行 Android 開發時時常在想:“為什麼 Android 中不能有這樣好用的特性?”。

現在使用 Kotlin,我們可以做到了。

可選類型內置在 Kotlin 的類型系統中,函數是一級公民,類型匹配(某種程度上)和不可變類型等特性終於讓我在 Android 開發中可以使用真正的函數式編程。

9. David Vávra

在我的主要應用(Settle Up[8])的生產環境中我使用了 Kotlin,它已經足夠成熟,而且相比 Java(任何版本) 有很多的優點[9]。Kotlin 完全兼容現有的 Java 工具和函數庫,同時能夠很好的在 Android Studio 中使用。

如果現在新創建一個 APP[10],我肯定會選擇 Kotlin。最常見的反面論點是:“但是還不熟悉 Kotlin 的同事會抱怨而且會降低開發效率”。這一點我是不同意的,從 Java 轉到 Kotlin 真的不需要費多大勁,而它的優點會很快呈現出來。相比之下,剛開始使用 RxJava 將會感覺困難得多。

對於移植現有 APP 而言,是否使用 Kotlin 需要根據具體情況而定。例如你可以只在一個頁面使用 Kotlin,但如果想 100% 發揮這門語言的優點,那最好是全面轉到 Kotlin。當然這一點我們很難向項目負責人去證明。

Kotlin 現在唯一需要的僅僅是 Google 的官方認可,Google 不需要做其他任何事情,只需要在官方文檔中增加 Kotlin 版本的代碼片段(像對 Swift/ObjectiveC 所做的那樣)。如果官方認可 Kotlin,那麼我們將會看到 Koltin 成為大部分人的主要選擇,祈求在今年的 Google I/O 大會上變成現實。

10. César Valiente

我認為 Kotlin 是一門非常棒的現代編程語言。

它的學習曲線很平緩,你可能只需要花一天時間來學習它的語法,就可以用 Kotlin 寫出一些代碼,實現某些功能。Kotlin 寫起來真的很過瘾,很好玩,而且很簡潔,它具備其他現代語言的特性,它由 JetBrains 這樣很專業的團隊進行持續的開發,同時一直有社區的支持,因為它是開源的!

這裡我不想花時間介紹 Kotlin 的那些解放開發者的特性,因為官方文檔已經做了很好的說明,同時我們可以在 IDE 或者 Web 頁面中使用 Koans[11] 來進行練習,Kotlin 社區也在不斷的發布者新的激動人心的內容。

在 Android 平台,Kotlin 給我們 Android 開發者帶來一股清流,給了我們一個新的理由來享受編寫 APP,使用 Kotlin 你可以編寫更少的代碼,最重要的是在一天結束時,你的代碼可讀性更強,樣板代碼更少,而且由於編寫同樣的代碼所花費的時間更少,你將變得更有生產力,正如我前面說過的,使用 Kotlin 你會很開心!

至少在 Android 社區,有一個問題懸而未決:kotlin 已經准備好應用在線上產品了嗎?我的回答是當然,JetBrains 去年就已經發布 1.0 的穩定版本。

你覺得如果沒有為線上產品准備好的話 JetBrains 的聰明家伙們會正式發布它嗎?當然不會。Kotlin 已經用在了 JetBrains 的一些產品中,其他公認的偉大的公司也在線上產品中使用了 Kotlin。

好的,一切聽起來不錯,但應該也有一些不好的地方吧?沒錯,Kotlin 社區等待的事情之一是工具的支持。當你在一個團隊工作時,靜態代碼分析工具是非常重要的。在 Kotlin 中我們仍然有所欠缺,當然你可以對 Kotlin 工程進行構建,運行測試等,這些基礎的功能還是有的,但像 CheckStyle,PMD,FindBugs 之類的支持 Java 語言的工具非常重要,在 Kotlin 中還不支持(好吧,在 IntelliJ 中內置支持代碼分析,但這是不夠的)。

所以,如果你在一個大團隊中工作,靜態分析工具在你的日常工作中是非常重要的(理應如此),你需要對這一點多加考慮。如果你在一個小團隊中工作,那麼你可以控制所有事情的發展(譯者注:包括使用 Kotlin)。

總的來說,Kotlin 是偉大的,使用 Kotlin 你將會擁有更多樂趣,同時工作也更高效(至少比用 Java 開發 Android 強),雖然還有關於靜態代碼分析工具的一些問題,但如果你能夠不使用這些工具,那麼去嘗試 Kotlin 吧,你會愛上它的!

11. Nelson Glauber

Kotlin 是一門令人印象深刻的語言,該語言的特性是驚人的,它移除了 Java 語言所需的一堆樣板代碼。更不用說市面上絕大多數函數庫(用 Java 語言編寫)完全兼容 Kotlin 的事實。另外一個使得該語言易於采用的是它和 Android Studio 的完美和穩定的兼容。

對於 Java/Android 開發者(新手可能未必如此)而言學習曲線很緩和。我從去年開始通過閱讀 Antonio 的書[12](順便說一句,這本書很棒)來學習 Kotlin,從那以後,我一直在我的個人項目和演講中使用這門語言。

不幸的是,我還沒有機會在線上產品中使用它,但我毫不懷疑 Kotlin 已經成熟到足以在大型項目中有效的使用。

在我看來,不使用 Kotlin 的唯一理由是,一旦你開始用 Kotlin 進行編碼,你將不想再使用 Java 進行編碼。

12. Ryan Harter

大約一年前,我開始用 Kotlin 來編寫所有的新代碼,經過一些嘗試,我發現它是穩定的,而且這門語言提供的若干特性所帶來的好處值得我做這樣的轉換。歸功於 Kotlin 和 Java 的可互操作性,任何我用 Kotlin 還不知道怎麼實現的功能,我可以回退到使用 Java 來實現。

Kotlin 的擴展函數語言特性最大程度上簡化了我的工作流程,雖然這個特性很簡單。在我的圖形相關工作中,需要做大量的數學和矩陣操作,也就是會用到很多工具類。擴展函數[13]極大的簡化了代碼的編寫,並使代碼更加的精煉。在原有的面向對象編程的基礎上,混合著對函數式編程的支持,使得工作更加的愉快。

對於正在考慮切換到 Kotlin 的開發者,我的最大建議是記住 Kotlin 和 Java 並不是非此則彼的關系,相反,Kotlin 能夠很好的和現有的 Java 代碼協同工作,所以你可以一步一步的開始嘗試使用 Kotlin。

13. Ubiratan Soares

從一個開發者的經驗來看,Kotlin 是 Android 應用開發的未來。

Kotlin 對 Android 開發的影響和三年前 Grade 對 Android 的影響非常相似。作為 Android 開發者社區,我們應該擁抱 Kotlin,傳播 Kotlin,並讓一大批的開發者來使用 Kotlin,因為我們值得擁有更好的方法來開發 APP,滿足用戶的需要並在工作中取得好成績。

14. Philippe Breault

Kotlin 對於 Android 開發者而言是一股清流。

我喜歡它在 lambda 表達式上所做的工作,能夠讓編譯器內聯 lambda,當它起作用時,允許我們 Android 開發者在緊湊循環中使用它,這樣通常可以避免實例化新對象。

簡單的特性當然也很重要,例如表達式後面不需要加分號;如果在同一行給一個變量賦值時不需要輸入兩次變量的類型;使用屬性來代替 getters/setters 方法等等。這些特性使得代碼閱讀更方便。

我唯一希望得到改進的功能是 Android Gradle 插件和 Kotlin 插件的可互操作性。現階段,兩者的混合使用經常會出現問題。

話雖如此,每個 Android 開發者都應該對這門語言保持關注,最好是嘗試使用它。

15. Iñaki Villar

Kotlin 為 Android 平台帶來了新酷的概念,而不僅僅是使用另外一門語言來編寫類和 activities。

我們此時正在將自動化框架移植到 Kotlin 上,我們正在享受如何用聲明的方式定義自己的 DSL,並讓開發和測試人員更流暢的編程測試代碼[14]。

16. Dan Lew

在不犧牲性能或者安全性的前提下,Kotlin 相比 Java 能夠編寫更加簡潔易懂的代碼。Kotlin 最終編譯為字節碼,因此能夠表現的跟 Java 一樣好,它跟 Java 有一樣的編譯時檢查(同時具備 Java 沒有的內建空類型檢查)。更重要的,Kotlin 的語言特性和標准庫函數能夠編寫簡潔有效的代碼。

此外,Kotlin 擁有強大的生態系統。當然,來自 JetBrains 的原生工具支持是不錯的,除此之外,這門語言正得到積極的支持和改進,同時,JetBrains 在每次升級 Kotlin 時並沒有做不兼容的修改。而且 Kotlin 可以和 Java 很好的相互協作,這使得從 Java 到 Kotlin 的轉變很容易。

最後,作為一個 Android 開發者,我喜歡 Kotlin 還有另外一個重要的原因:Kotlin 能夠獨立於 Android 系統版本進行升級。由於 Java 語言的能力是和 Android 操作系統綁定的,開發者經常會錯過 Java 新版本的語言特性和標准庫 API。相比之下,當 Kotlin 新版本發布時,你就可以開始使用新版本的語言特性了。

17. Enrique López Mañas

我是作為一名 Java 開發者自然而然的過渡到 Android 開發的,因為兩者語言是通用的,所以我決定試一下,這是一個充滿意義的選擇,就我個人而言,這一年是在 2009 年。Java 誕生於 1995 年,從那時起到現在,陸續發布了一些新版本,在原有語言特性的基礎上進行新增和改進,當前的版本是 Java 8。Java 是 22 年前設計的,考慮到技術發展的速度,Java 算是一門不朽的語言,同時目前它也有一些不容忽視的缺點。作為一個開發者,我經常會嘗試其他語言。最明顯的解決了 Java 某些缺點的語言是 Scala。轉折點是我在實踐中看到了像 Swift 這樣的語言。我也在為 iOS 平台編寫代碼,並注意到 Swift 是如何克服像空類型這樣的具有明顯缺點的語言特性的,從此打開我在 Java 語言中一直以來忽略的很多問題。

由於最初設計等本質原因,Android 平台原生支持所有 Java 7 的語言特性,部分支持 Java 8 語言特性。相當於 Android 平台跟其他使用 Java 語言的平台相比,落後了很多。而 Kotlin 的出現填補了這個空缺。

Kotlin 是一門現代編程語言(1.0 版本是在 2016 年 2 月發布的)。它最初的目標是彌補 Java 的缺點,像 Scala 語言所做的那樣,但解決了一些存在的問題(例如,編譯時間)。

JetBrains 對 Kotlin 作了了不起的優化工作,在最近一個版本中 Kotlin 的編譯時間得到了顯著的提升。作為一個 Kotlin 新手,下面是最初我想到的一些問題的答案:

  • 和 Java 的可互操作性:Kotlin 可以直接和 Java 類進行交互,當然也有其他方式。最基礎的一點:我確實想重用老的代碼倉庫,並引入 Kotlin。
  • 轉換工具:雖然不能盲目的信任 Java 到 Kotlin 的自動轉換,但這個功能確實很棒。當我將 Java 類轉換為 Kotlin 類時,我可以很容易的復用 60%~70% 的結果代碼。我的做法是不要一次性將整個代碼庫從 Java 轉換為 Kotlin,而是遵循小步迭代。這樣審查轉換後的代碼所花的時間也會很少。

回到 Kotlin 本身,在使用 Java 進行多年的開發後,嘗試使用 Kotlin 這種新鮮東西感覺很棒。如果你是一名 Java 開發者,Kotlin 的語法對你而言是非常自然的。如果你是一名 Swift 開發者,也會有同樣的感覺,而且你會很容易理解 Kotlin 的一些關鍵概念例如空類型。Kotlin 其他吸引我注意的特性如下:

  • 空類型:告訴你公司的業務人員你可以避免產品中三分之二的異常,這將是一件令人心動的事情。直到開始使用 Kotlin,你才意識到在 Java 中沒有空類型是多麼糟糕的一件事情。
  • 函數式編程:是的,Kotlin 正如 Scala 一樣,支持函數式編程。
  • 默認和命名參數:再次的,如果你之前沒有嘗試過這種特性,你將永遠不會知道它的可貴之處。在 Kotlin 中,你可以為一個函數的參數設置默認值,並為每個參數命名。這成倍的增加代碼的可讀性和易讀性。
  • 智能的強制轉換:厭倦了使用 instanceof 進行類型判斷然後進行類型轉換吧?它似乎總是非常多余的步驟,本應該很容易防止的。Kotlin 自動為你實現這些步驟。

Koltin 還有一堆的特性,可能需要幾篇文章的篇幅來進行列舉和深入介紹。總結來說:Koltin 是一門用於補充和完善 Java 不足的語言。對於 Java 開發者而言學習曲線很平緩。這不是一個非此即彼的問題,因為你可以在你的 Java 代碼倉庫中同時使用 Java 和 Kotlin。Kotlin 將會提高您的工作效率,從中長期來看,它將使你成為一名更好的程序員。

[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/

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved