Getting started with Kotlin on Android
2017年3月26日,ThoughtWorks高級谘詢師張帥、王智勇在“Mobile Open Day—小步構建移動開發知識網絡”進行《Getting started with Kotlin on Android》演講分享。IT大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發布。
嘉賓分享視頻地址:https://t.cn/RKwZwbZ
Java VS Kotlin
在Java的使用中會遇到很多問題。它的語法繁瑣,API低級;隨時可能出現null pointer問題;有各種各樣的util類和混亂的泛型。
Data Class
在Java Bean裏有成員函數string topic、string type和list speakers。
Getter/Setter可以使Java成員既有封裝性,又能對外暴露很多接口。
還有很多其它的方法,比如toString、hashCode和equals。
而Kotlin要實現一個單例,隻需一個關鍵字“object”。
Optional
Null pointer是代碼中一個常見的bug。
Late-Initialized&Lazy
在代碼中經常會遇到一些方法,它們不需要在構造函數中進行初始化操作,這時就可以通過lateinit var關鍵字把它聲明成懶加載模式。
Full name是通過last name和first name組裝起來的,隻有用到full name的時候,才會調出lazy的這個表達式,生成一個值,非常方便,解決了懶加載的問題。
Extensions
在Java中,要想擴展一個類,我們會寫一堆Utils。
而在Kotlin中,我們可以直接對double對象進行擴展,再也不需要Utils的類了。
Collections
常見的Collections有Stack、Map、Queue和List等等。
在Kotlin中把Collections分為mutable和immutable兩類,這樣有助於消除錯誤,設計更好的API。
Generics
我們要創造一個協變的應用才能引用它子類的集合,與之對應的還有逆變。
對於不可變集合是默認協變,可變集合默認是逆變的。
總結一下
Kotlin提供了高級的語法,例如data、object等。
對於null pointer問題,它有optional對象。
有val、late-intialized、lazy和Collections支持。
可以用擴展語法讓代碼更加可讀。
Generics簡單好用。
Kotlin cool feature
Inline function
如果在開發過程中發現有性能問題,可以把代碼進行優化,在代碼運行起來之後,body block會被封裝成一個函數對象。加入了Inline,body就會被Inline到函數調用的地方去。
Inline還有個功能叫reified。當我們讀取網絡返回的時候,會用Gson來解析字符串,在寫的過程中會發現語法有冗餘。引入reified以後,可以把類型聲明成reified,這樣在函數題裏就會引用到這個類型具體的Class。Kotlin有一定的類型推導功能。
Sealed Class
SealedClass可以限製住一個副類一共有多少個子類。
Delegated properties
對於一個property,可以把它Delegated一個對象上,每當讀寫property的時候,它都會調用對應的函數。
Coroutines
Coroutines把回調式的寫法改成了流式的寫法。
總結一下
Inline function減少了運行的開銷。
SeadledClass限製了類的層級。
Delegate使得代碼更加簡潔。
Coroutines提高了異步代碼的可讀性。
Kotlin in Android
Kotlin在Android上可以自動把view找出來,不需要手寫代碼。
Kotlin's Reference
已知問題
Kotlin與mockito的兼容性。
在Kotlin裏的靜態代碼檢查工具還不完善。
Kotlin對於Java裏的一些關鍵詞和操作符的語義做了改變。
以上是我今天分享的內容,感謝聆聽!
福利贈票!
IT大咖說作為7月24日OpenStack Days China大會(在北京國家會議中心舉行)的官方現場直播合作夥伴,特為小夥伴們爭取了少量免費VIP票福利(原價¥600)!
獲取方式:
掃碼加這位小姐姐微信(或加微信號:ITDKS666),她會告訴你咋整!(備注:openstack)
最後更新:2017-07-13 11:32:31