天天看點

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

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

本文轉載自“技術小黑屋”,原文《如何看待 kotlin 成為 android 官方支援開發語言?》。文章轉載已獲授權。

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

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

關于 google 為什麼會選擇 kotlin,我認為有兩方面的原因。

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

2.選用kotlin,實至名歸,這個榮譽它值得擁有。kotlin确實以其實用,高效赢得了海外很多公司和開發者的認可,比如square的jake大神一直在推kotlin。kotlin在國外至少有将近2年的應用生産環境的實踐(非jetbrains内部實踐應用)。在移動開發中,相比ios程式員,android程式員總是很幸運,因為我們有很多優秀好用的工具(android studio等),選用kotlin,則是google 為開發者提供高效的開發工具的一貫作風。

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

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是有很多很多的文法糖。有必要簡單普及一下文法糖的概念(如下摘自維基百科)

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

決定kotlin使用這麼多文法糖的除了簡潔,高效可讀之外,還有一個原因,是因為kotlin編譯生成的class檔案是目标到jvm 6(基于jvm 6 是一種權衡後的結果),比如我們在kotlin中使用了lambda,它是不可能編譯成invokedynamic指令的,因為那樣會導緻在jvm6上根本無法識别,是以經常通過翻譯成内部類的形式來實作。

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

kotlin是一門實用語言,這是它的基因,它不是學術語言,它的目标是減輕開發者的負擔。它很适合 android,因為大多數的 android 的程式員是做工程。

kotlin,是基于jvm的程式設計語言,但是基于jvm的程式設計語言并沒有什麼不好。(j)vm的出現無非也是一種平衡的結果。在犧牲部分執行效率的前提下,提供了一定的抽象,加快了開發者的效率。這種tradeoff其實更加有利于人的一側,這也是程式設計語言發展的趨勢和目标

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

繼續閱讀