haocheng 積分 0

是說升到 4.0 還要1分半? 還是 3.x 就要分半?

haocheng 積分 0

我也是兩三版才升一次,不過倒是沒啥注意到 build.gradle 語法問題,可能我用的都不難吧

IngramChen 積分 0

gradle 改版速度太快,所以一般都跟不上。

我的策略是 IDE 說要升哪一版,才會跟著升 (通常比最新的慢兩版)

Intellij IDEA 很奇怪,gradle 版本不一樣,build.gradle 的語法檢查都會怪怪的。

IngramChen 積分 0 編輯於

我 android 專案要 compile 1分半… 用最快的 macbook pro...

haocheng 積分 0

快 100 倍聽起來蠻威的 XD

IngramChen 積分 0

我是指連 MVP pattern 都不要用

View 直接呼叫處理邏輯的 business facade ( fooManager, fooService...etc) 就行。

hungys 積分 0

除非邏輯寫在 Activity,不然就算是比較主流的 MVP pattern 也有一層 Presenter 甚至額外訂 View interface,應該沒有比較不煩?

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 的嗎

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 積分 2

Android 的新的開發架構指南。

基本上有用 RxJava 的話,LiveData 和 Life cycle 可以跳過,是一樣的東西。

Room 這個 persistent library 看起來不錯,最少 query 時是自己寫 sql。開發者也不用再煩惱該選哪個 Android ORM 了,選這個官方的算長期飯票。

ViewModel 的話見人見智,如果有寫測試的話那大概很需要這個 pattern,如果沒有的話那多這一層有點煩…

popcorny 積分 0

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

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

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 是很困難的事,因為各家的用戶都很保護 (挺) 自家的平台,不喜歡外來種,即使自家的語言一堆缺點…

IngramChen 積分 0

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

IngramChen 積分 0 編輯於

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

IngramChen 積分 0

我 android 蠻順的啊,只覺得動畫的速度太快而已。

flutter 能夠接受用 material design 的 UI 就能採用。不過現在還早的很,至少要開始看到 Google 本家的 app 開始用 flutter 改寫才算數 (google map, photo, youtube... etc)

嘛,Google 打的算盤是 -- 可以開始用同個程式產生兩大平台 Android, iOS 的 app,然後之後可以 native 的跑在 ChromeOS 上,而那時的 ChromeOS 可能已經蓋在 Fuchsia 上了。最後的最後則是 Web。

Kros 積分 0

在兩個平台都裝了 Newsvoice。iOS 還是比較順暢(幾乎所有跨平台工具都一樣)。感覺還是只適合做一些內部用或簡單 App。

IngramChen 積分 2

screenshot 上面的 << icon 就是 flutter1 的 logo

flutter 大概完成了八成了吧,現在被用在 Google 內部的 app (CRM)。也有人實驗性的開始寫小 app,像是 Newsvoice2 ,有興趣可以裝裝看,看看重寫過後的 flutter native widget 的感覺如何。

IngramChen 積分 0

Android studio 2.4 開始內建重要的 lambda/default method 了,不用在靠 retrolambda。

不過我們有開始改寫 kotlin 了...

kotlin 承襲太多 scala 的語法,老是寫不習慣。新語言中我還是最喜歡寫 dart