Android的Kotlin初探


記錄一下自己嘗試Kotlin的思維與過程,歡迎有不同想法的人交流與討論。

開始嘗試最大的動力當然就是Google官方支持Kotlin,在導入或評估新技術的時候一定要考量其效益與風險比 ,從這個角度來說,官方支持大大的減少使用Kotlin的風險,不過在之前玩Scala的經驗來說,還是需要克服學習的痛苦與效益低落,效益低落就是以完成需求來說Java沒什麼問題,為什麼要特地承受風險與學習、維護成本來換個語言,做一樣的事情?有絕對性效益的提升嗎?以現在的結果論來說Scala在日常開發上是沒有絕對性效益提升的,那麼問題回到我們的主題,Kotlin有低風險、高效益嗎?雖然官方支持Kotlin但是否有像Swift一樣的新官方語言地位?,Kotlin跟Java比真的有更好的效率嗎?在拒絕Kotlin之前總是需要先去暸解他,不然自己會不會變成阻礙進步的大石頭呢?總之就先讓我們一邊嘗試一邊理解吧!


一開始記得先去安裝plugin

那麼就讓我們開始來思考,用Kotlin來開發Android有什麼好處呢?第一時間吸引我目光的就是Android Extensions,用這個plugin有什麼優勢呢?用了這個plugin之後就可以不用透過findViewById的方式,直接透過id就能使用View了!

將layout import
 id為hello的View
在Activity中直接透過id使用

在舊專案上體會Kotlin也讓我感受到有IDE的加持下的語言果然很威,不愧是jetbrains推出來的語言(jetbrains為開發IntelliJ的公司),在IDE的強力輔助之下,用在Android上的Kotlin設定或是Java檔案轉Kotlin檔,通通都幫你做好好,只要滑鼠點一點就完成了!
加入Kotlin的設定

單一檔案的轉換

甚至從java檔複製程式片段到kt檔,也能幫你把片段轉換為kotlin版

在以上的功能加持下,能夠大大的降低Kotlin的學習曲線,不知道Kotlin怎麼寫可以先寫Java的寫法,再用工具幫忙轉,也可以一邊學習Kotlin的寫法,慢慢的從Java轉移到Kotlin,現有的Java舊程式先不改也沒關係,在Kotlin裏呼叫也完全沒問題,未來專案有空檔再去一邊學習Kotlin寫法一邊轉換即可,老實說到這邊真的是讓人驚呼Jetbrains示範了如何降低新語言門檻,讓使用者能夠快速轉換與降低學習的痛苦感,加上Google登高一呼,Kotlin未來忽然很值得期待啊!

剛從Java轉到Kotlin會遇到的學習點就是空值安全 (Null Safety),在Kotlin中預設是不能將變數設為null的例如
var a: String = "abc" a = null // 編譯錯誤
如果能夠賦予null就要加入問號,例如
var b: String? = "abc" b = null // ok
更多細節就請參考官方文件中文翻譯,大方向是要明白的減少null的使用,避免null造成的危害。

還有一個就是關鍵字lateinit(延遲初始化),Kotlin的變數宣告時就預設要給值,如果沒給值就會顯示錯誤,而使用這個關鍵字就是明確表他會晚點初始化,這也是避免null的一種手段,如果使用了沒初始化的變數就會丟出UninitializedPropertyAccessException,算是非常棒的防呆設計!剩下的就讓我們一邊前進一邊探索Kotlin的美好吧~

2017/08/02 驗收記錄
空值安全在自動轉換的時候,也是個不穩定因素,最後還是需要完整的測試,才能避免無故的Crash,所以並不建議去將沒有自動化測試保護的舊Java檔轉為Kotlin檔。



資源記錄
線上編輯
Simplest version | Try Kotlin - https://goo.gl/z9Hhq6
素材
Code Samples | Android Developers - https://goo.gl/W1srGi
Java跟Kotlin的轉換語法參考
https://github.com/MindorksOpenSource/from-java-to-kotlin
Kotlin調用Java問題
https://www.kotlincn.net/docs/reference/java-interop.html#空安全和平台类型

Kotlin語法速查表,可以印下來貼在座位旁參考


留言