Java to Kotlin (1) - 就決定是你了

2017年,Kotlin的發展可謂十分迅猛,稍微關注it界的人都知道谷歌宣佈kotlin成爲安卓的一級語言,不過那時候我並無關注,由於我不是搞安卓的... 哈哈開個玩笑,其實以前也有據說過這個語言的名字,但當時對我來講就真的是一個名字而已。java

直到前幾周我無心間看了一篇爲何我要改用XXX語言這種系列的文章,接着花了幾天的時間去了解了一下以後,我忽然意識到,oh my god, kotlin, 這就是我一直想要的。算法

用相見恨晚這個詞來形容我以爲還挺貼切的,爲何呢?我喜歡函數式編程,我認爲用函數式的思惟去解決問題可讓複雜的問題變得十分簡單,這就好像之前讀小學初中作數學題有直接一步一步解決的思路,也有列方程而後求函數方程的解法,後者在描述與解決問題上十分清晰與簡單,列出了方程式以後只須要求方程的解就好了。編程

我日常使用的語言是java,在java7時代我使用guava來進行一些少許的函數式編程(由於大量的匿名內部類真的無比難看),好在java8引入了lambda讓表述清晰了不少,不過java8中的還不夠。因而隨着興趣,我學習了lisp,一門超級簡潔的語言,可我發現,在實際工做中的做用微乎其微,更多的是思想上的提高。我開始尋找可以切合我自身實際狀況的函數式語言,因而乎很天然的就想到了jvm平臺上有沒有這種語言呢,果真是有的,例如ClojureScala,這兩個前者是lisp在jvm上的方言,後者據說是強化版java,身爲一個java並想着實踐的人,我更傾向於scala,又是一個偶然我看到了scala實現一些經典算法的例子,大部分的實現只須要1行或者2行,着實讓我驚了個呆,因而立刻開始學習...但是漸漸的我發現,scala是否是有一些太複雜了,例如類型系統與各類符號組合,我再次驚了個呆。驚歎完我在想:哎仍是老老實實搞java吧,爲何老是想這些有的沒的呢?框架

對於java,我我的最喜歡的有2點,一是生態環境很是良好,開源,擁有大量而又成熟的類庫,框架,解決方案並持續更新。二是我喜歡靜態語言,而java是強類型的靜態語言,雖然這使得你要多寫不少字符,不過這樣編譯器會讓你少犯不少低級錯誤,同時對於維護來講,java把語法規範的很死,大大下降了維護的難度,由於你們寫的代碼都是長的差很少的(在同一種編程範式下),固然你也喪失了必定程度的自由:) 與之成爲鮮明對比的就是scalascala同一種解決問題方式的寫法有NNN種,而且總有你看不懂而且不怎麼想看的....jvm

扯的有點遠,不過總結上文,從我我的狀況來講,在我心目中對我來講最合適的語言是這樣的ide

  • 支持函數式編程,不要求像嚴格函數語言那樣(例如lisp,haskell),但至少要more than java
  • JVM平臺上的,可以享受JVM生態資源
  • 靜態語言,這樣能夠減小不少沒必要要的錯誤
  • 語法有自由度但不能太自由(例如scala),語法自由度應當是大於java小於scala
  • 擁有良好的生態環境與成熟解決方案,這樣不用什麼東西都本身造
  • 學習成本低,能夠很容易的上手

我一直以爲這樣的要求會不會是一種奢求,然而並非... kotlin完美的符合我所但願的全部要求(這就是我爲何以爲相見恨晚的緣由),對比上面幾點,kotlin都是符合甚至超出的函數式編程

  • 支持函數式編程,而且由於擴展函數的特性,可作的事比java多
  • 不只僅是JVM平臺上的語言,而且編譯後的字節碼就是java的字節碼
  • 是靜態語言
  • 語法比java簡潔,但又沒有像scala那麼開放,例如只能重寫有限的操做符,中綴函數必須聲明(scala默認全部的都是)
  • 能夠和java完美兼容,所以能夠享受到java良好的生態環境
  • 和java代碼能夠互相調用與轉換,本質上能夠當作java的擴展版,上手十分快,熟悉java的語法通常1,2天就能夠用Kotlin開發了

除此以外,kotlin還擁有函數

  • 強大的ide-idea的支持,不須要換ide就能夠直接編寫(idea目前就是Kotlin編寫的)
  • java工程的轉換十分容易
  • 很是棒的dsl系統
  • fun 有趣,我只能這麼來形容了,就是有趣,有不少地方都值得研究,而且絕不枯燥。

我目前的工做是獨立負責一塊內核模塊,所以個人自由度仍是挺高的,因而在我花了大約一週的時間(得益於idea的自動轉換,大部分時間都在重構上,由於自己就是函數式的寫法因此重構也很快),將代碼轉換成了Kotlin版本的,過程很是流暢,運行起來的效果也絲毫沒有受到影響。學習

因此若是你和我同樣有上面的這些苦惱的話,不妨試試Kotlin,真的很不錯。idea

相關文章
相關標籤/搜索