Why I like Kotlin ?
新 GDE 上任三把火,第一篇分享這個出來我想也是挺好的,這邊部分內容也是我準備 interview GDE 的資料。
如果你 Google why Kotlin 或是 Kotlin pros. and cons. 這些關鍵字,你可以找到很多相關的文章。其實講的內容大同小異,我也不再重複。
相信很多人跟我一樣是從 Java Backend 領域轉過來的,以 Backend Side 來說,其實還是很多人選擇留在 Java 而不是往前探索 Kotlin。我聽過最強力的擋箭牌大概就是 Java 可以做到所有 Kotlin 能做到的事,為什麼我需要轉呢?
以商務的角度來說,我必須說他們是正確的。所以我的標題是 Why I Like Kotlin 而不是 Why you should use Kotlin。
在台灣以 Java 為系統主力語言的公司中,Spring Framework 的市佔率可能高達八成以上。所以當 Java 版本升級的時候,大部分的開發者會停留在 LTS 版然後觀望 Spring Framework 的升級相容度和大公司採用度。這產生一個有趣現象,目前絕大部分的開發者停留在 Java 1.8 和 Java 11,只有很少的人會嘗試使用 Java 1.9, 10, 12, 13, 14, 15。所以雖然版本升得很快,但大家其實不太嘗試與使用。
因此,下面就來介紹為什麼我喜歡 Kotlin 吧。
JVM Family
如果你也有 Scala 的開發經驗,那你會發現他們有很多語法相似之處。新興語言的優勢本來就在此,包含 Kotlin 1.5 最新的 Seal Classes 也是一樣早已存在 Scala 的語法。而記得在我開發 Scala 一段時間後,就有個大膽的想法,試圖把他們 mix 在同一個 project 使用。
我必須說,那真是糟糕的經驗。很明顯地 Scala 想走出自己的路,相容度不是它的第一設計考量。
跟 Scala 不同的是,Kotlin 跟 Java 高度相容,無論你要在一個專案中混合調用、編譯和部署,體驗都十分一致。而它也和其他 JVM 語言一樣繼承了 JVM 生態系,所以以前 Java 怎麼做的基本上在 Kotlin 就是這麼做,這也讓它相對其它新語言算是贏在起跑點。
Data Class
我選擇先講 Data Class 就知道這東西有多重要。畢竟這也算是過去 Java 會遇到的一個老問題,對於 Object 所需要的 Override Method,包含 getter & setter、hashcode、equals、toString 等等方法我們常常需要反覆撰寫。
最早我們可能是用 IDE 輔助快速生成,然後出現了 Lombok Framework,透過 Annotation 的方式在編譯期生成程式碼,但 IDE 也因此需要增加 plugin 的耦合。
但現在以 Kotlin 的 Data Class 來說,只要這樣
清潔溜溜還送你一個 copy method,順便處理物件複製的議題,所以 Data Class 被稱為轉 Kotlin 首選語法是有道理的!不過呀, Scala 其實早有類似的概念叫做 Case Classes。
Syntax
語法簡潔與提高可讀性應該是整體來說相較於 Java 的最大不同,避免翻譯落差我就儘量使用英文了。例如:var and val、fun、: vs extends、no semicolon、no return、single return can skip curly brackets、if is statement no expression、Singleton object、Elvis Operator、Type Inference、Type Aliases、Named Arguments、Null Check、More Pretty Lambda、String Interpolation、Pattern Matching、Operator Overloading、Infix Notation、Destructuring Declaration 等等。
更重要的是我覺得 Kotlin 可以同時讓你自由地選擇 OO 風格或是 FP 風格來編寫程式,這真的很棒!
Extension Function
這個語法也是其他語言很早就有的,在你無法修改原始碼的狀況下,這是一個擴充的利器,幫助你提高可讀性。於是你就可以跟 XxxUtil.java 或者是 XxxService.java 說再見,這會讓你的程式變成串在後面,比起以前像 PHP 或 Java 那種從前面開始串會更順一點。
Scope Functions
我的啟蒙前輩稱這個為垃圾不落地或是串串串大法,話不多說直接看程式碼。相較原本 Java Code 必須要靠 Programmer 的排版素養
Kotlin 可以改寫成這樣,用 scope 分隔來提高可讀性,也能讓你的 Kotlin 看起來不是那麼 Java。
Coroutine
還有什麼比用它來收尾更為適當的呢?不過這部分容我拖稿到下一篇吧。因為這個東西我覺得會是 Spring Backend Side 下一個世代的主流。如果把這個也加上去我就真的要改標題了呢。
歸根來說,其實就是提高寫程式的舒適度,例如可讀性。但實話說只要你有正確的觀念,採用適當的 API 跟寫法,Java 跟 Kotlin 其實並不會有很大的生產力或是效能差距。
而如果能承繼 Spring Framework with Java 轉換到 Spring Framework with Kotlin,這也能讓 Kotlin 在商務應用上更被重視,作為新任的 Kotlin GDE,期待大家一起來寫 Spring Framework with Kotlin!