Google IO 2017宣布了 Kotlin 會成為 Android 官方開發語言。一時間朋友圈和Android圈被各種刷屏。當然我也順勢而為發布了一篇的文章《為什么我要改用Kotlin》,著實狠狠地蹭了一波熱度(盡管這樣會被鄙視)。眼下Android圈已經躁動了,甚至嚴重到如果對Kotlin視而不見就顯得自己不像一個合格的Android程序員。
本文嘗試從一個客觀全面一點兒的角度來看待這件事情,盡力為大家提供一個比較理性的觀點供參考。
關于 Google 為什么會選擇 Kotlin,我認為有兩方面的原因。
為了逐漸擺脫專利流氓Oracle。從去年的轉向OpenJDK,到現在的支持Kotlin作為官方語言,某種意義是為了擺脫藉由9行代碼敲詐獲取天價賠償的Oracle。
選用Kotlin,實至名歸,這個榮譽它值得擁有。Kotlin確實以其實用,高效贏得了海外很多公司和開發者的認可,比如Square的Jake大神一直在推Kotlin。Kotlin在國外至少有將近2年的應用生產環境的實踐(非JetBrains內部實踐應用)。在移動開發中,相比iOS程序員,Android程序員總是很幸運,因為我們有很多好用的工具(Android Studio等),選用Kotlin,則是Google 為開發者提供高效的開發工具的一貫作風。
Kotlin的有很多特點,比如簡潔,安全實用,開發效率高和提升可讀性,更好的函數式編程支持。
1.簡潔,Kotlin的代碼確實比Java更加簡潔,比如類型推斷,省去結尾的分號等等,然而這遠不能成為我們改用Kotlin的原因。
2.安全,這是Kotlin的一個很重要的特性。Kotlin是空指針安全的,JetBrains做了一件很聰明的事情,它們將運行時才能空指針的檢測提前到了編譯時,主要方式是增加了Any?這種可為空的類型,使用Kotlin之后,我們程序的空指針會得到明顯的改善。
3.實用,高效率。Kotlin的實用具體表現在
4.Kotlin引入了Lambda,Streams API 和函數式編程支持。
5.可讀性 從客觀上,Kotlin語法和特性上讓代碼更加具有描述性而已。但是不得不指出代碼可讀性主要依賴編寫者的編碼素質和能力。
對我個人而言,高階函數和方法擴展這兩個特點著實真心受用。方法擴展會讓我有一種創造感,這是Java種的Util方法所無法比擬的。
這個很難說,因為這個世界上并不是一件事物好,就會必然得到廣泛應用的。一件事物的推廣開來靠的是一群人,但阻力也往往也來自一群人,只不過和前者不是相同人群。
從個人主觀來看這個問題,我更加愿意看到這種現象發生。原因并不是因為我更喜歡Kotlin,而是在于我更愿意看到事物在進步,在變得,所以即便某一天Kotlin被更加的語言取代,我也是很歡迎的。
Kotlin適用于多個平臺,并沒有對學習者做限制。任何有學習意愿的人都可以習得這門語言。
但是考慮到國內 Kotlin 資源不夠豐富,網絡不夠暢通等問題,所以導致了很多人變成了吃瓜群眾進行觀望。
然而,對于一個項目和團隊來說,總需要有個人先來推進。而且這個推進過程并非順利,這其中包括
上述推進 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,我認為需要具備以下幾點
目前想到了一些關于 Kotlin 應用在項目中的一些顧慮。這些顧慮目前并非全面,但是提出來,希望大家可以規避和改善。
1.寫出來的代碼并不是 Kotlin style。解決這個問題,還是需要多學習和思考
2.擴展方法的濫用,Kotlin 的擴展方法很好,我們可以擴展很多方法,彌補Framework的一些不完善,但是擴展時我們需要謹慎,一定要把合適的方法放到合適的類型上,不可為了簡單增加不符合某些類不應該具備的職責。 具體需要好以下兩點
Kotlin出來之后,聽到了兩種不同的聲音:
出現以上兩種不同的聲音,不得不引起我們對于 Android 程序員的核心競爭力的思考。那么到底什么才是 Android 程序員的核心競爭力呢?
Android程序員和其他程序員甚至其他職業并無二致,我認為這種競爭力表現在解決問題的能力。想要具備這種能力,極其依賴我們對問題和技術的準確認識和扎實的基礎。
編程語言本質上還是工具,好的工具能帶來更好的效果,但是如何運用好,將效率和質量提升到高,則還是更主要的依賴于開發者的能力。
選用好的工具,更側重夯實基礎和加強對事物本質認識的能力,我想這樣才能讓我們的競爭力更強。
總結而言,Kotlin是一個更好的工具,沒有它,并不影響我們日常的 Android 開發工作。但是我還是建議開發者和團隊去嘗試這種語言,抓住這個近在咫尺的小確幸。
事情的發展越來越顯得不可控了,推介Kotlin和不看好Kotlin的人逐漸分化出來,更準確的說,甚至這件事已經快要演變成了從對事變成了對人。
Kotlin 成為 Android 官方語言的消息一出來,一下子出來了很多被當做投機蹭熱點的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 的程序員是做工程。
Kotlin,是基于JVM的編程語言,但是基于JVM的編程語言并沒有什么不好。(J)VM的出現無非也是一種平衡的結果。在犧牲部分執行效率的前提下,提供了一定的抽象,加快了開發者的效率。這種tradeoff其實更加有利于人的一側,這也是編程語言發展的趨勢和目標
Kotlin 在國內推廣應用的道路可謂是 漫漫而修遠兮。因此更需要真正實踐,去踩坑的人開始on board,去出產更多的真正能推動 Kotlin 應用的文章,分享等這些有實質性意義的行動。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。