當前位置:
首頁 > 科技 > 如何看待Kotlin成為Android官方支持開發語言?

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

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



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


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


為什麼會選用Kotlin

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


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


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


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


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


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


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


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


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


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


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

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


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

巧用React Fiber中的渲染字元串新功能
ColumnStore在大數據中的應用實踐
支持自動水平拆分的高性能分布式資料庫TDSQL
为什么我要改用Kotlin
Yelp是如何做到每天運行成千上萬個測試

TAG:CSDN |

您可能感興趣

哄搶模式開啟!Virgil Abloh x Air Jordan 1發售信息官方確認!
谷歌Advanced Protection Program現支持iOS官方應用
細節高清欣賞!Air Jordan 1「Shattered Backboard」Satin 官方照釋出!
Air Jordan 1 Low Flyknit「Shattered Backboard」配色官方圖片釋出
Virgil Abloh x Air Jordan I 官方預覽照發布
入手有難度!Nike Air Force 1 「PlayStation」 迎來官方發布
adidas Originals 個性鞋款 Sobakov 官方圖片釋出
Kendrick Lamar x Nike Cortez Kenny 3 官方預覽照釋出
這雙Virgil Abloh x Air Jordan 1完勝官方?Bred才是最酷的配色?
官方新聞/Adidas Originals By Pharrell Williams Hu 限定系列
你的腎怎麼樣?那雙「北卡藍」Virgil Abloh x Air Jordan 1 官方發售信息也曝光了!
任天堂的Virtual Boy以非官方的Cardboard形式返回
官方聯名看膩了?Virgil Abloh x Air Jordan 1 雙勾版考慮一下?
Off-White? x Nike聯名Zoom Fly Mercurial Flyknit官方圖釋出,還有原價發售信息!
「黑色」官方圖片中的Air Jordan 1 Low Flyknit
美輪美奐!Air Jordan 11 Low 「Rose Gold」 釋出官方圖片!
疑似官方 Supreme + OW 定製風格 Air Jordan 1 釋出!
Air Jordan 13「Hyper Royal」配色官方圖片釋出
Air Jordan 1 Rebel 全新「Chicago」配色官方發售詳情公開
Virgil Abloh x Air Jordan 1 白色版官方圖片及發售信息