如何看待 Kotlin 成爲 Android 官方支持的開發語言?

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表達式和方法引用,讓我們的代碼處理一件事情以描述的形式,而不是命令實現的方式。

● 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 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 應用的文章,分享等這些有實質性意義的行動。

可參考:http://news.ifeng.com/a/20170522/51137343_0.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章