Day 1:可見性express
在 Kotlin 中一切都是默認 public 的。而且 Kotlin 還有一套豐富的可見性修飾符,例如:private, protected, internal。它們每一個都以不一樣的方式下降了可見性。編程
須要處理代碼中的空值?可使用 elvis 操做符,避免您的 「空狀況」 (null-erplate)。這只是替換空做爲值或者返回事件狀況的一個小語法。安全
格式化字符串?將$放在變量名的前面去表達字符串中的變量和表達式。使用 ${expression} 求表達式的值。app
強大的 switch!Kotlin 的 When 表達幾乎能夠匹配任何東西。字面值,枚舉,數字範圍。您甚至能夠調用任意函數!編程語言
for 循環在與其餘兩種 Kotlin 特性一塊兒使用時能夠得到超級能力:範圍表達式和解構。函數
在 Kotlin 中,類能夠具備可變和只讀屬性,默認狀況下生成 getter 和 setter。若是須要,您也能夠實現自定義的。post
Android KTX 使用解構來分配顏色的組件值。您能夠在您的類中使用解構,或者擴展示有的類來添加解構。學習
本週以基本知識爲主:處理空錯誤,簡化循環和條件,屬性,解構架。下一週咱們將會深刻探索 Kotlin 的更多功能。測試
Day 8:簡單的 bundleui
準備去經過簡潔的方式去建立 bundle,不調用 putString,putInt,或它們的 20 個方法中的任何一個。一個調用讓您生成一個新的 bundle,它甚至能夠處理 Arrays。
喜歡 Parcelable 的速度,但不喜歡寫全部的代碼?和 @Parcelize 打個招呼。
能夠建立具備一個具備處理數據的類嗎?將它們標記爲 "Data" 類。並默認實現生成 equals() 方法 - 至關於 hashCode(),toString() 和copy(),並檢查結構是否相等。
Lambda 很是貼心,使用最後一個參數調用語法您能夠取消回調,Callable 和 Runnable,例如 Android KTX 貼心的用一個小包裝來處理 postDelayed。
方法參數的數量是否太多?在函數中指定默認參數值。使用命名參數使代碼更具可讀性。
在同一個項目中使用 Kotlin 和 Java?您有沒有頂級功能或屬性的課程?默認狀況下,編譯器將生成類名稱 YourFileKt。經過使用 @file:JvmName 註釋文件來更改它。
迭代器用在了有趣的地方!Android KTX 將迭代器添加到 viewGroup 和 sparseArray。要定義迭代器擴展請使用 operator 關鍵字。 Foreach 循環將使用擴展名!
這周咱們更深刻學了 Kotlin 的特性:簡潔 bundle,迭代,Data,postDelay,默認參數,序列化。下一週咱們會了解更多的 Kotlin 特性而且開始探索 Android KTX。
Day 15:sealed 類
Kotlin 的 sealed 類可讓您輕鬆的處理錯誤數據,當結合 LiveData 您能夠用一個 LiveData 同時表明成功和失敗的路徑,這比用兩個不變量要好。
懶加載是個好東西!經過使用懶加載,能夠省去昂貴的屬性初始化的成本直到它們真正須要。計算值而後保存併爲了將來的任什麼時候候的調用。
Android 中,在 onCreate 或者其它的回調初始化對象,但在 Kotlin 中不爲空的對象必須初始化。那麼怎麼辦呢?能夠輸入 lateinit。來承諾最終將會初始化。
您方法的參數是有效的嗎?用 require 在使用前能夠檢查它們,若是它們是無效的將會拋出 IllegalArgumentException。
您的封閉類的狀態是否正確?可使用 check 來驗證。若是檢查的值爲 false,它將拋出 IllegalStateException。
等不及要使用 lambdas 來生成一個新的接口?kotlin 可使您制定一個 inline 的方法 -- 這意味着調用將替換方法體,用很很是簡單的方法來生成 lambda 的接口。
用操做符重載快更快速寫 Kotlin。像 Path,Range或 SpannableStrings 這樣的對象容許像加法或減法這樣的操做。經過 Kotlin,您能夠實現本身的操做符。
類的實用方法?將它們添加到源文件的頂層。在 Java 中,它們被編譯爲該類的靜態方法。
本週主要討論一些基本的 Kotlin 特性,如運算符重載,內聯,運算符重載,懶加載,以及很是強大的 inLine,並展現了使用 Android KTX 處理內容值,捆綁包和回調時如何編寫更簡潔的代碼。
Day 22:簡單的內容值
將 ContentValues 的強大功能與 Kotlin 的簡潔性相結合。使用 Android KTX 只傳遞一個 Pair <StringKey,Value> 建立 ContentValues。
特定於域的語言能夠經過使用類型安全的構建器來完成。它們爲簡化 API 作出貢獻;您也能夠本身藉助擴展 lambdas 和類型安全構建器等功能構建它們。
具體化的概念例子:Android KTX 中的 Context.systemService() 使用泛化來經過泛型傳遞 「真實」 類型。沒有經過 getSystemService。
Android KTX:Context.systemService()
經過 by 用您的工做委託給另外一個類。經過類繼承,並將屬性訪問器邏輯與委託者屬性重用。
沒有更多的 Util 類。經過使用擴展功能擴展類的功能。把您要擴展的類的名字放在您添加的方法的名字前面。
擴展功能的一些特性:
不是成員函數
不要以任何方式修改原始類
經過靜態類型信息解決編譯時間
會被編譯爲靜態函數
不要多態性
例如:String.toUri()
若是您曾經將 Drawable 轉換爲 Bitmap,那麼您知道須要多少樣?Android KTX 具備一系列功能,可使您的代碼在使用圖形包中的類時更加簡潔。
序列是從未存在的列表。序列是迭代器的表親,一次只能懶散地產生一個值。這在使用 map 和 fifter 時很是重要 - 它們將建立序列,而不是爲每一步都複製列表!
功能強大但很難使用 - 這就是 Spans API 感受的文本樣式。 Android KTX 爲一些最多見的 span 添加了擴展功能,並使 API 更易於使用。Android KTX: 可跨越字符串的構建器
經過默認參數擴展示有的 API 一般會讓每一個人都高興。 Android KTX 容許您使用默認參數在視圖的一側設置填充。一行代碼能夠節省不少代碼!Android KTX: View.updatePadding
讓咱們運行一些標準的 Kotlin 函數!簡短而強大,run,let,with 和 appy 都有一個接收器 (this),可能有一個參數 (it) 並可能有一個返回值。差別以下:
run
本週咱們涵蓋了更多語言特性,如 interop,refied 和 sequence,而且在 Android KTX,展現了它幫助您編寫簡潔易讀的代碼的一些方法。咱們也討論了高級特性:領域特定語言 (DSL)。