如何看待 Kotlin 成為 Android 官方支援開發語言

來源:互聯網
上載者:User

標籤:gre   版本   檢測   範圍   dia   man   競爭   責任   and   

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的有很多特點,比如簡潔,安全實用,開發效率高和提升可讀性,更好的函數式編程支援。

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

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

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

引入Object,便於我們更好的應用單例模式
引入data class, 避免了我們手寫getter/setter/toString等方法
引入參數預設值和具名參數,避免了不必要的方法重載
支援擴充方法,讓我們可以省去好多必須要的代碼
4.Kotlin引入了Lambda,Streams API 和函數式編程支援。

Lambda運算式可以省去了我們建立很多匿名內部類的代碼(注由於目前Kotlin基於JVM6,Lambda運算式在位元組碼階段依然會翻譯成內部類形式)
Streams API 結合Lambda運算式和方法引用,讓我們的代碼處理一件事情以描述的形式,而不是命令實現的方式。
Kotlin支援OOP(物件導向編程)和FP(函數式編程),語言本身並沒有限制,給了我們選擇的自由,Kotlin對FP的友好支援,便於我們寫出更加穩定,易於測試,無副作用的方法和代碼
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 http://www.dazhonyule.cn/ 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” http://www.wendinyule.cn/ for human use: www.yigouyule2.cn 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 應用的文章,分享等這些有實質性意義的行動。

如何看待 Kotlin 成為 Android 官方支援開發語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.