為什麼我們當初沒有選擇 Kotlin
原文發表於為什麼我們當初沒有選擇 Kotlin
今年的 Google I/O 終於欽定了 Kotlin 作為 Android 第二個官方的開發語言. 一年前,我還是實習生的時候,我司就在嘗試 Kotlin 了,並運用在了家校通,賽誠PAD 上.
但是為什麼後續的應用沒有使用 Kotlin 開發呢?
最初遇到的問題lint
Kotlin 在當時不支持 lint ,很多本可以發現的問題,在使用 Kotlin 後就無法發現了.
後來 Kotlin 支持了 lint ,然而很長時間內都只支持到 Android Studio 1.5 .於是我在 AS 的四個頻道之外,又放了一個 1.5 的包,每次開發 Kotlin 的應用來使用.
Data Binding
我司開發時使用了 Data Binding,並且使用的很多.當時 Data Binding 本身還不穩定,有時會出一些奇怪的錯誤.和 Kotlin 混用後,遇到的錯誤更多了,還無法確定究竟是哪方面出了錯誤.
那為什麼選擇了繼續使用 Data Binding 而不是選擇停用 Data Binding 使用 Kotlin 呢? 因為 Data Binding 真的有用,雖然最初踩了一些坑,但使用起來之後,不管在代碼量上,代碼結構上,Debug 難度上 都有很大的益處.
然而 使用 Kotlin 後,我們沒有發現任何益處.
Kotlin 的問題
使用一個新的技術,一定要有一個使用它的理由,比如可以節約時間,或者可以減少錯誤.當然官方選擇也是一個重要的理由.
那麼 Kotlin 有什麼優勢呢?
data class
每次介紹 Kotlin ,都會拿 data class 進行開場.的確,對於一個基礎的數據類,Kotlin 看上去很簡單.然而實際使用上就是另一回事了.
如果你需要一些自定義的 setter 呢(比如使用一個類來設定多個屬性)? ,如果你需要使用 Data Binding 呢?
你就會發現 Kotlin 的 Data Class 沒有任何意義.getter 和 setter 都需要再次重寫.
而且在Java 中 getter ,setter, toString 等都可以使用 IDE 自動生成.包括 Data Binding 屬性也可以使用Data Binding Formatter來生成.如果我們當時使用 Kotlin 來寫 data class, 我想我也許會再寫一個 Kotlin 版本的 Data Binding Formatter,在 IDE 允許的情況下.
null 安全
Kotlin 另一個重要優勢,」Null 安全」實際上也沒什麼優勢.
Android 已經有了Annotations來處理 Null 的問題.
另外由於 Android 的生命周期的特性,例如在 OnCreate 中賦值的變數,在 Kotlin 中依舊需要聲明為可空變數,並沒有比 Java 高明多少.
「?.」的語法糖,實際上大部分如果可能為空的情況,空和非空都需要進行處理(例如對用戶進行提示),所以這個語法糖基本用不上.
多樣的寫法
Kotlin 的寫法很多,從一個方法返回就有多種寫法.也許有人覺得這是優點,然而對於企業級的開發協作來說是難以接受的.最終使用那種方法來寫,又可以爭論個幾天.
生態的缺失
當然最重要的還是生態不完善.Java 有大量的 擴展, 活動模板 等幫助開發.然而當時 Kotlin 什麼都沒有.
另外,Kotlin 的 與 Java 完全兼容說的是 Kotlin 調用 Java 時,千萬不要覺得反過來也是如此.
也就導致了想用 Kotlin 的項目發現,寫底層方法很適合 Kotlin ,然而 Java UI 層調用就坑了.
不會遇到 Java 層調用的 UI 層,又發現 Kotlin 沒什麼用武之地,而且沒有擴展與活動模板等幫助,還得純手寫.
結論
當然,本文並不是說 Kotlin 沒有優勢,只不過想提醒你, Kotlin 並沒有宣傳的那麼好.
後續我們會再次使用 Kotlin 么?
當然會.既然 Kotlin 已經是 Android 官方的開發語言了,有理由相信,在某一個時間點後,我們會選擇使用 Kotlin 來開發新的需求.
※增強網站設計吸引力的方法
※log4j 日誌信息的引入——解決項目運行過程中的日誌信息
※React Native+Cordova WebView 演進:Plugin 篇
※Spring中抽象類中能不能進行@autoware?
TAG:推酷 |
※為什麼你要選擇iphone6s
※iPhone8Plus告訴你為什麼不要選擇iPhone7Plus,它已經落後了
※選擇困難症!朋友問我買iPhoneX還是買iPhone8Plus,你會怎麼選?
※現在的iPhone 6s plus還值得買嗎?這些選擇機會你應該知道!
※你怎麼選擇:Android還是IOS?
※不必糾結iPhone 8和iPhone X之間該怎麼選擇
※It s my choice/這是我的選擇
※為什麼選擇Android和iOS仍然十分重要,答案你絕對想不到
※現代老爹鞋新作再現,John Elliott x Nike也要插一腳讓你選擇更困難
※NodePort,LoadBalancer還是Ingress?我該如何選擇
※Mobius 聯合創始人:為什麼選擇 Stellar 而不是以太坊?
※choose life 選擇夢想
※我們選擇Pisces—爸爸的感言
※看景還是拍照,to be or not to be?這是個兩難選擇
※給蘋果的選擇題,iPhone 7和iPhone 8蘋果應該腰斬誰?
※「The 1 Reimagined」後續有驚喜,出彩配色讓你選擇困難!
※iPhone 8與iPhone 7對比!這樣你還會選擇iPhone 7嗎?
※討厭浮誇大logo?你還可以選擇這些迷你小logo!
※好馬配好鞍:你的iPhone X還沒選擇它們?
※新款iPad與iPad Pro到底有什麼區別,該選擇哪一款好呢?