自從 Kotlin 1.1 之後,它開始導入了 coroutine ,然後我就跳坑了。 原本冀望可以爽爽寫 async/await,不過看起來還太早。
不過寫了 kotlin 二、三個月下來,寫起來的確爽,超越我個人最愛的 Dart。現在就是什麼寫 Android 或是寫 Server 都是 kotlin 為主,不寫 Java 了。
Kotlin 也讓我對 ?
, !
null operator 改觀,原本最早接觸這種 operator 是在 Swift,但我寫的很痛苦。不過在 Kotlin 裡就沒有類似的困擾,原因大概是從 Java 來的程式碼,不需要特別處理 ?
吧。這個決定是比較正確的。
因為我們還在導入的前期,目前 Kotlin 用的功能不多: null operator, data class, collections 三者是最常用的功能,而 extension 是遇到 Android API 太爛才會去用。另外,.let{}
, .apply{}
這幾個小工具真是讓人愛不釋手,可以預想未來其他語言會開始模仿類似的功能。
嘛,之後還要慢慢挖掘更多 kotlin 的進階功能。
如果你寫 Java 會動用到 lombok1 或是 AutoValue2 這種改造 Java 語法弱點的工具,那直接跳 Kotlin 吧,不要再浪費時間了。
不過,開發 Mobile 我個人的美夢是 Flutter ,而不是 swift/kotlin。後者兩個語言再好,也解決不了平台 API 太難寫的問題。而且開發 Mobile 要寫兩份程式實在太傷太傷了…
謝謝koji找我來討論
自從進來mozilla除了在 local 寫一些test, 就沒再寫kotlin了( 但這即將轉變..嘿嘿...)
對我來講最爽的地方(對不起我很嫩 錯了請盡量更正)
可以不用一堆file, 一個 file 可以有多個public class/ interface (之前用clean architecture )
Function as first class citizen. 這個web世界已經有的在Java需要一堆interface才能達成.
Extension function 可以不用寫一堆extend class 但只改一點點的肥肥
lamda 可以寫出很優雅的 side effect free code. state 可以留在scope內不用到處追code下debug
Extension function expression 可以讓client端程式很優雅 (2~5好像都講同一件事 XD)
smart cast, NPE free. 這個習慣了就回不去java了. 光這點就很值得用這個語言了
7.沒有遇過跟其他library 不work的問題. (幾乎是)無痛移轉 , call stack 清楚精準.
8.好上手, 大概100小時候就改完前公司30%的 Android code ( Custom View + MVP)
缺點的話(抱歉我到1.1以後就沒再寫了) 除了compile慢了一點(個人經驗30%), 沒有其他的
唯一的意外就是Java call Kotlin的時候常要查一下, 因為Kotlin call Java幾乎無感, 但反過來的話就必須要對這個語言有點了解才有辦法. 常常是在這種地方才會發現 "啊!原來Kotlin幫我做了這麼多事啊,難怪比Java 好用"
最好的學習方式就是看 pdf1 吧 然後應用的話我是
把 data model 改成用 data class
把 Utility class 改成用 extension function
有發生過ClassCastException跟NullPointerException 的class ->按右鍵, translate to kotlin
把 Presenter / dump view 按右鍵, translate to kotlin
把 chain call . status check 寫成 lamda
重新思考架構, 也許有的地方不需要任何architecure...
看一些functional prgoramming 的東西
看一些kotlin library 怎麼寫的
有興趣的話可以研究一下 redux-java / redux-kotlin , 對於寫Java/Android也會蠻有幫助
Jake wharton 一樣有許多kotlin的talk, Antonio Leiva的書從另外一個角度切入也不錯,
用kotlin 寫一些 test, 思考一下 test 的架構
對了有人要一起去kotlinconf2 的嗎
看來 Ingram已經跳Kotlin一段時間了,我自己還沒有試過,但是對java很過時的語言特色很感冒。用Kotlin有什麼缺點,會不會有太多語言專用的library的缺點? 我對scala最感冒的就是他把整個標準函式庫都翻了,所以寫scala幾乎就被scala的library綁住了。
Kotlin 的缺點
- compile 會有點慢,慢 30% 吧
- IDE 有時候會頓頓的
- 然後和 Spring cglib 混合時,開發階段有時會有靈異現象。(有一段 code 居然不會被呼叫… 不管 rebuild 幾次都沒用,重開機才會好…)
上面是比較困擾的小問題,但如你說見,都是 tooling 相關的。語言本身反而沒有遇到什麼障礙。tooling 的話就是隨時間會慢慢改進。
Scala 把 collection 標準函式都翻了,所以轉來轉去很煩,還用一些 implicit 去轉,越補越大洞。Kotlin 它的 std library 有夠小的,Java 有的通通都沒有翻,用 kotlin collection 就是順順順。你可以感覺就是用另一個 sugar 語言寫 Java 而已,寫出來的成品還是 Java。
至於效能面我還沒評估,但我也不太擔心就是,JVM 本來就超快,可以容許你寫沒效率的程式。如果未來遇到 bottleneck 就那段用 Java 重寫就好了。
要學 kotlin ,不會太難學,但也要一段時間才能寫出有 kotlin 味道的程式,但是比學 scala 快多了。
學 kotlin 最快的方式是安裝 kotlin-koan1 plugins ,然後花一個下午走一遍,就會對 kotlin 很有感覺,也算是有了初步的評估。
團隊要導入就是:
- 安排一個下午大家一起寫 kotlin-koan,一起討論
- 隔天開始從 unit test 開始改起
- 一週後沒人會再想寫 Java :-)
我彷彿聽到了 Scala 用戶的哀豪…
- Gradle - checked
- Spring 5 - checked
- Android - checked, finally
不用猜也知道 Java 界未來五年都是 kotlin 的天下了,所以這其實沒什麼好討論的。
Kotlin 未來的真正挑戰是如何跨出 Jvm,也就是 kotlin-native, kotlin-js 等計畫,kotlin 還想跑在 iOS 上咧!
不過基本上我不樂觀就是,跨 eco-system 是很困難的事,因為各家的用戶都很保護 (挺) 自家的平台,不喜歡外來種,即使自家的語言一堆缺點…