當前位置:
首頁 > 知識 > 如何看待 Kotlin 成為 Android 官方支持的開發語言?一線開發者這樣說

如何看待 Kotlin 成為 Android 官方支持的開發語言?一線開發者這樣說

如何看待 Kotlin 成為 Android 官方支持的開發語言?一線開發者這樣說



編者按:在剛剛結束的谷歌 I/O 2017 開發者大會上,官方宣布將支持 Kotlin 作為 Android Apps 開發的 First-Class 語言。一石激起千層浪,消息一出,立即引發了國內外相關從業者對此事件的廣泛關注和熱烈討論。本文作者段建華,作為 Flipboard 中國區 Android 資深研發工程師,我們來不妨看看他對此事的看法。原文載於作者個人博客「技術小黑屋」,雷鋒網 AI 研習社已獲授權。文中相關鏈接詳見文末「閱讀原文」。


Google IO 2017 宣布了 Kotlin 會成為 Android 官方開發語言。一時間朋友圈和 Android 圈被各種刷屏。當然我也順勢而為發布了一篇的文章《為什麼我要改用Kotlin》,著實狠狠地蹭了一波熱度(儘管這樣會被鄙視)。眼下 Android 圈已經躁動了,甚至嚴重到如果對 Kotlin 視而不見就顯得自己不像一個合格的 Android 程序員。


本文嘗試從一個客觀全面一點兒的角度來看待這件事情,儘力為大家提供一個比較理性的觀點供參考。

為什麼會選用Kotlin


關於 Google 為什麼會選擇 Kotlin,我認為有兩方面的原因。


為了逐漸擺脫專利流氓Oracle。從去年的轉向OpenJDK,到現在的支持Kotlin作為官方語言,某種意義是為了擺脫藉由9行代碼敲詐獲取天價賠償的Oracle。


選用Kotlin,實至名歸,這個榮譽它值得擁有。Kotlin確實以其實用,高效贏得了海外很多公司和開發者的認可,比如Square的Jake大神一直在推Kotlin。Kotlin在國外至少有將近2年的應用生產環境的實踐(非JetBrains內部實踐應用)。在移動開發中,相比iOS程序員,Android程序員總是很幸運,因為我們有很多優秀好用的工具(Android Studio等),選用Kotlin,則是Google 為開發者提供高效的開發工具的一貫作風。


成為 Android官方開發語言意味著什麼


官方:工具支持(Android Studio 3.0附帶Kotlin),官方的宣傳(教學視頻,主題演講等)


對於社區來說,Kotlin版本的庫和框架如雨後春筍般湧現


對於Java,曾經藉助Android這場春風,著實讓遲暮的它再度輝煌,現在和將來在Android領域可謂是棋逢敵手,Java的在Android開發語言市場份額會降。但是這也並不一定是壞事,有競爭才能更好進步。


對於Android 開發者,我們多了一種開發Android的語言選擇,那些對於之前由於前景不明朗卻對Kotlin躍躍欲試的人可以放心使用了。有了Kotlin意味著開發效率應該會有所提升。


對於團隊,這往往帶來了一個選擇的問題,Use Kotlin or not, That』s a question. 團隊中總有人想要嘗試Kotlin,而另一些人則興緻不那麼高。由於歷史包袱,團隊成員興趣,對於已有項目採用Kotlin和Java長期並存是實際可行的方案。而新項目則應該鼓勵使用Kotlin,但具體還需要結合團隊的能力和其他因素。

Kotlin的魅力究竟在哪裡


編者按:關於本節內容的詳細介紹,讀者可以參考文章開頭提到的文章《為什麼我要改用Kotlin》,就以下提到的每個 Kotlin 的特點,文中都給出了直觀的代碼樣例解釋。


Kotlin的有很多特點,比如簡潔,安全實用,開發效率高和提升可讀性,更好的函數式編程支持。


1. 簡潔,Kotlin的代碼確實比Java更加簡潔,比如類型推斷,省去結尾的分號等等,然而這遠不能成為我們改用Kotlin的原因。


2. 安全,這是Kotlin的一個很重要的特性。Kotlin是空指針安全的,JetBrains做了一件很聰明的事情,它們將運行時才能空指針的檢測提前到了編譯時,主要方式是增加了Any?這種可為空的類型,使用Kotlin之後,我們程序的空指針會得到明顯的改善。


3. 實用,高效率。Kotlin的實用具體表現在


引入Object,便於我們更好的應用單例模式


引入data class, 避免了我們手寫getter/setter/toString等方法


引入參數默認值和具名參數,避免了不必要的方法重載


支持擴展方法,讓我們可以省去好多必須要的代碼

4. Kotlin引入了Lambda,Streams API 和函數式編程支持。


Lambda表達式可以省去了我們創建很多匿名內部類的代碼(注由於目前Kotlin基於JVM6,Lambda表達式在位元組碼階段依然會翻譯成內部類形式)


Streams API 結合Lambda表達式和方法引用,讓我們的代碼處理一件事情以描述的形式,而不是命令實現的方式。


5.可讀性 從客觀上,Kotlin語法和特性上讓代碼更加具有描述性而已。但是不得不指出代碼可讀性主要依賴編寫者的編碼素質和能力。


對我個人而言,高階函數和方法擴展這兩個特點著實真心受用。方法擴展會讓我有一種創造感,這是Java種的Util方法所無法比擬的。


Kotlin是否會取代Java


這個很難說,因為這個世界上並不是一件事物好,就會必然得到廣泛應用的。一件事物的推廣開來靠的是一群人,但阻力也往往也來自一群人,只不過和前者不是相同人群。


從個人主觀來看這個問題,我更加願意看到這種現象發生。原因並不是因為我更喜歡Kotlin,而是在於我更願意看到事物在進步,在變得優秀,所以即便某一天Kotlin被更加優秀的語言取代,我也是很歡迎的。


哪些人適合率先應用 Kotlin


Kotlin適用於多個平台,並沒有對學習者做限制。任何有學習意願的人都可以習得這門語言。

但是考慮到國內 Kotlin 資源不夠豐富,網路不夠暢通等問題,所以導致了很多人變成了吃瓜群眾進行觀望。


然而,對於一個項目和團隊來說,總需要有第一個人先來推進。而且這個推進過程並非順利,這其中包括


首先你需要足夠了解Kotlin


你需要說服團隊,這期間你會接收到很多challenges,有時候你會很沮喪和生氣


你需要提供一系列的資料或分享,比如如何配置,sample code, troubleshooting等等


有時候甚至你經常兼職做mentor指導工作,這也就意味著你的手頭上的其他工作需要被打斷


上述推進 Kotlin 觀點部分參考自Life is Great and Everything Will Be Ok, Kotlin is Here (Google I/O 『17) 中 Christina Lee(Pinterest Software Engineer,國外 Kotlin 美女佈道師之一)的分享內容。


雖然 Kotlin 很優秀,但是推動在項目中推動 Kotlin 應用並非易事,因為這對於新事物來說在正常不過了,就像明治維新一樣看起來很光鮮,成功,但是它的變革進程並非順利,先是血雨腥風的倒幕運動,再到明治六年爆發的標誌武士時代結束的西南戰爭,經過數十年的努力才算取得成功。


因此關於哪些人適合率先應用 Kotlin,我認為需要具備以下幾點


Java 技術和基礎要好,這一點很重要

英語要好,因為目前 Kotlin 的資料幾乎都是英文的,當然也推薦看英文的


願意承擔在項目團隊推進工作,有耐心,敢挑戰,負責任


關於Kotlin 項目應用中 的一些顧慮


目前想到了一些關於 Kotlin 應用在項目中的一些顧慮。這些顧慮目前並非全面,但是提出來,希望大家可以規避和改善。


1. 寫出來的代碼並不是 Kotlin style。解決這個問題,還是需要多學習和思考


2. 擴展方法的濫用,Kotlin 的擴展方法很好,我們可以擴展很多方法,彌補Framework的一些不完善,但是擴展時我們需要謹慎,一定要把合適的方法放到合適的類型上,不可為了簡單增加不符合某些類不應該具備的職責。 具體需要最好以下兩點


選擇在合理範圍內的最抽象類增加方法,比如我們想為Activity增加一個longToast,應該想一想是不是放在更加抽象的Context會更好一些


同時也不能為了便利,增加和當前類不相關的方法,比如我們想為每個Context增加顯示一個簡單dialog的擴展方法,這顯然不是很合理,因為對於非UI的Context這是有問題。


Android 程序員的核心競爭力在哪裡


Kotlin出來之後,聽到了兩種不同的聲音:

太好了,終於可以有理由改用Kotlin了,寫代碼更加高效了。可以逐漸開始放棄Java了。


WTF,又要學新的語言,感覺好累,會不會以後面試不會Kotlin就被pass掉呢。


出現以上兩種不同的聲音,不得不引起我們對於 Android 程序員的核心競爭力的思考。那麼到底什麼才是 Android 程序員的核心競爭力呢?


Android程序員和其他程序員甚至其他職業並無二致,我認為這種競爭力表現在解決問題的能力。想要具備這種能力,極其依賴我們對問題和技術的準確認識和紮實的基礎。


編程語言本質上還是工具,好的工具能帶來更好的效果,但是如何運用好,將效率和質量提升到最高,則還是更主要的依賴於開發者的能力。


選用好的工具,更側重夯實基礎和加強對事物本質認識的能力,我想這樣才能讓我們的競爭力更強。


總結而言,Kotlin是一個更好的工具,沒有它,並不影響我們日常的 Android 開發工作。但是我還是建議開發者和團隊去嘗試這種語言,抓住這個近在咫尺的小確幸。


額外的話


事情的發展越來越顯得不可控了,推介Kotlin和不看好Kotlin的人逐漸分化出來,更準確的說,甚至這件事已經快要演變成了從對事變成了對人。


Kotlin 成為 Android 官方語言的消息一出來,一下子出來了很多被當做投機蹭熱點的Kotlin推介者,當然還出現了一些看不慣這些做法的人,他們認為前者刻意拔高了Kotlin。因而討論越來越偏向從事情到人的方面。我想要說的是,就像商人追求利潤,資本家攫取剩餘價值那樣,投機者蹭熱點,以及招致他人批評,這都是正常的事情,但是我們不能讓討論脫離問題的本質,我們需要回歸。

很多人說Kotlin無非就是很多語法糖,沒什麼突破


沒錯,Kotlin是有很多很多的語法糖。有必要簡單普及一下語法糖的概念(如下摘自維基百科)


In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language 「sweeter」 for human use: things can be expressed more clearly, more concisely, or in an alternative style that some may prefer.


由定義可知,語法糖的目的就是讓代碼更簡單,更可讀。


決定Kotlin使用這麼多語法糖的除了簡潔,高效可讀之外,還有一個原因,是因為kotlin編譯生成的class文件是目標到JVM 6(基於JVM 6 是一種權衡後的結果),比如我們在Kotlin中使用了Lambda,它是不可能編譯成invokedynamic指令的,因為那樣會導致在JVM6上根本無法識別,所以經常通過翻譯成內部類的形式來實現。


使用語法糖又能怎樣,它的目的是好的,畢竟它真真實實介紹了開發人員的代碼量。


Kotlin是一門實用語言,這是它的基因,它不是學術語言,它的目標是減輕開發者的負擔。它很適合 Android,因為大多數的 Android 的程序員是做工程。


基於JVM沒有什麼不好


Kotlin,是基於JVM的編程語言,但是基於JVM的編程語言並沒有什麼不好。(J)VM的出現無非也是一種平衡的結果。在犧牲部分執行效率的前提下,提供了一定的抽象,加快了開發者的效率。這種tradeoff其實更加有利於人的一側,這也是編程語言發展的趨勢和目標


Kotlin 在國內推廣應用的道路可謂是 漫漫而修遠兮。因此更需要真正實踐,去踩坑的人開始on board,去出產更多的真正能推動 Kotlin 應用的文章,分享等這些有實質性意義的行動。

研習社特供福利ID:OKweiwu


開發者專場 | 英偉達深度學習學院現場授課


英偉達 DLI 高級工程師現場指導,理論結合實踐,一舉入門深度學習!


課程鏈接:mooc.ai


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 唯物 的精彩文章:

入門深度學習必知的知識點:視覺的深度學習與網路
請問,你真的了解區塊鏈應用?

TAG:唯物 |

您可能感興趣

Android 開發者們,如何使用 Python 來擴展 adb 命令?
話說太早!開發者:Android Q Root很難
【新鮮】谷歌開發Android是為抗衡iPhone?根本沒把它放眼裡
Android 內核的開發「頑疾」如何解決?
Android 開發應該掌握的 Proguard 技巧
開發 iOS 應用,Kotlin Native 是否夠格?
以太坊前開發者要做新一代區塊鏈 Nervos說他們不Nervous
Android 開發未來的出路何在?
開發者自己動手,讓Google Playground支持所有ARCore設備
開發者訪談:跟隨Kris Zierhut一起了解競技模式
TensorFlow,為什麼選擇 PyThon 作為開發語言?
App Store和Google Play到底有什麼不同?國外獨立開發者這麼說
iPhone XS支持美顏濾鏡?iOS開發者不這麼認為
Windows Lite 曝光,微軟打算開發一個對標 Chrome OS 的系統
Google的Angular 迫使我放棄了 Web 開發
還記得火到不行的Metrotown的Station Square嗎?巨頭開發商Anthem要重金打造素里啦,點擊看詳情。
叫板 Android 開發!跨平台應用開發神器 Flutter 又添開源插件!
微軟希望通過 Fluid Framework 開發框架讓 web 應用更高效
Facebook正在開發一種「Talk the Walk」的AI
使用 flutter 開發 ios/android 應用