13
Kotlin on Android. Now official (blog.jetbrains.com)
IngramChen 積分 8 編輯於

自從 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 要寫兩份程式實在太傷太傷了…

nevin 積分 7 編輯於

謝謝koji找我來討論

自從進來mozilla除了在 local 寫一些test, 就沒再寫kotlin了( 但這即將轉變..嘿嘿...)

對我來講最爽的地方(對不起我很嫩 錯了請盡量更正)

  1. 可以不用一堆file, 一個 file 可以有多個public class/ interface (之前用clean architecture )

  2. Function as first class citizen. 這個web世界已經有的在Java需要一堆interface才能達成.

  3. Extension function 可以不用寫一堆extend class 但只改一點點的肥肥

  4. lamda 可以寫出很優雅的 side effect free code. state 可以留在scope內不用到處追code下debug

  5. Extension function expression 可以讓client端程式很優雅 (2~5好像都講同一件事 XD)

  6. 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 吧 然後應用的話我是

  1. 把 data model 改成用 data class

  2. 把 Utility class 改成用 extension function

  3. 有發生過ClassCastException跟NullPointerException 的class ->按右鍵, translate to kotlin

  4. 把 Presenter / dump view 按右鍵, translate to kotlin

  5. 把 chain call . status check 寫成 lamda

  6. 重新思考架構, 也許有的地方不需要任何architecure...

  7. 看一些functional prgoramming 的東西

  8. 看一些kotlin library 怎麼寫的

  9. 有興趣的話可以研究一下 redux-java / redux-kotlin , 對於寫Java/Android也會蠻有幫助

  10. Jake wharton 一樣有許多kotlin的talk, Antonio Leiva的書從另外一個角度切入也不錯,

  11. 用kotlin 寫一些 test, 思考一下 test 的架構

對了有人要一起去kotlinconf2 的嗎

popcorny 積分 0

看來 Ingram已經跳Kotlin一段時間了,我自己還沒有試過,但是對java很過時的語言特色很感冒。用Kotlin有什麼缺點,會不會有太多語言專用的library的缺點? 我對scala最感冒的就是他把整個標準函式庫都翻了,所以寫scala幾乎就被scala的library綁住了。

IngramChen 積分 3

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 :-)
IngramChen 積分 0 編輯於

我彷彿聽到了 Scala 用戶的哀豪…

IngramChen 積分 1 編輯於

之前傳 Golang, Swift 要取代 Java 開發 Android 的人可以醒了

IngramChen 積分 1
  • Gradle - checked
  • Spring 5 - checked
  • Android - checked, finally

不用猜也知道 Java 界未來五年都是 kotlin 的天下了,所以這其實沒什麼好討論的。

Kotlin 未來的真正挑戰是如何跨出 Jvm,也就是 kotlin-native, kotlin-js 等計畫,kotlin 還想跑在 iOS 上咧!

不過基本上我不樂觀就是,跨 eco-system 是很困難的事,因為各家的用戶都很保護 (挺) 自家的平台,不喜歡外來種,即使自家的語言一堆缺點…

kaif 積分 0

Jetbrain真強

IngramChen 積分 0

Kotlin 已成為 Java.next ,其他人可以洗洗睡了