內容來源:2017年3月26日,ThoughtWorks高級諮詢師張帥、王智勇在「Mobile Open Day—小步構建移動開發知識網絡」進行《Getting started with Kotlin on Android》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
閱讀字數: 1128 用時: 7分鐘
Kotlin是一門與Swift相似的靜態類型JVM語言,由JetBrain設計開發並開源,與Java相比,Kotlin的語法更簡潔,更具表達性,並且提供了更多的特性。兩位ThoughtWorks高級諮詢師共同爲咱們分享Kotlin在Android上的運用。數組
嘉賓演講視頻地址:t.cn/RKwZwbZ微信
在Java的使用中會遇到不少問題。它的語法繁瑣,API低級;隨時可能出現null pointer問題;有各類各樣的util類和混亂的泛型。網絡
在Java Bean裏有成員函數string topic、string type和list speakers。異步
Getter/Setter可使Java成員既有封裝性,又能對外暴露不少接口。函數
還有不少其它的方法,好比toString、hashCode和equals。工具
而Kotlin要實現一個單例,只需一個關鍵字「object」。
性能
Null pointer是代碼中一個常見的bug。優化
在代碼中常常會遇到一些方法,它們不須要在構造函數中進行初始化操做,這時就能夠經過lateinit var關鍵字把它聲明成懶加載模式。設計
Full name是經過last name和first name組裝起來的,只有用到full name的時候,纔會調出lazy的這個表達式,生成一個值,很是方便,解決了懶加載的問題。3d
在Java中,要想擴展一個類,咱們會寫一堆Utils。
而在Kotlin中,咱們能夠直接對double對象進行擴展,不再須要Utils的類了。
常見的Collections有Stack、Map、Queue和List等等。
在Kotlin中把Collections分爲mutable和immutable兩類,這樣有助於消除錯誤,設計更好的API。
咱們要創造一個協變的應用才能引用它子類的集合,與之對應的還有逆變。
在Kotlin裏數組默認不是協變的。
對於不可變集合是默認協變,可變集合默認是逆變的。
Kotlin提供了高級的語法,例如data、object等。
對於null pointer問題,它有optional對象。
有val、late-intialized、lazy和Collections支持。
能夠用擴展語法讓代碼更加可讀。
Generics簡單好用。
若是在開發過程當中發現有性能問題,能夠把代碼進行優化,在代碼運行起來以後,body block會被封裝成一個函數對象。加入了Inline,body就會被Inline到函數調用的地方去。
Inline還有個功能叫reified。當咱們讀取網絡返回的時候,會用Gson來解析字符串,在寫的過程當中會發現語法有冗餘。引入reified之後,能夠把類型聲明成reified,這樣在函數題裏就會引用到這個類型具體的Class。Kotlin有必定的類型推導功能。
SealedClass能夠限制住一個副類一共有多少個子類。
對於一個property,能夠把它Delegated一個對象上,每當讀寫property的時候,它都會調用對應的函數。
Coroutines把回調式的寫法改爲了流式的寫法。
Inline function減小了運行的開銷。
SeadledClass限制了類的層級。
Delegate使得代碼更加簡潔。
Coroutines提升了異步代碼的可讀性。
在Android上有一個常見的類叫作viewholder。
Kotlin在Android上能夠自動把view找出來,不須要手寫代碼。
Kotlin與mockito的兼容性。
在Kotlin裏的靜態代碼檢查工具還不完善。
Kotlin對於Java裏的一些關鍵詞和操做符的語義作了改變。
以上是我今天分享的內容,感謝聆聽!
IT大咖說做爲第二屆APMCon中國應用性能管理大會的官方現場直播合做夥伴,特爲小夥伴們爭取了少許免費VIP票福利(原價¥1388)!
獲取方式:
掃碼加這位小姐姐微信(或加微信號:ITDKS666),她會告訴你咋獲取!(備註:聽雲社區)