31 天,從淺到深輕鬆學習 Kotlin

Android_開發者發表於2018-05-30

31 天,從淺到深輕鬆學習 Kotlin
這篇文章介紹開發者用 31 天學習 Kotlin 的心得,深入淺出地介紹了 Kotlin 的一些基本特性以及高階用法,對處於不同階段的 Kotlin 開發者來說,在提高開發效率和了解 Kotlin 提供一些參考,希望可以對大家有所幫助。

第一週

Day 1:可見性

在 Kotlin 中一切都是預設 public 的。並且 Kotlin 還有一套豐富的可見性修飾符,例如:private, protected, internal。它們每個都以不同的方式降低了可見性。

31 天,從淺到深輕鬆學習 Kotlin
Day 2:Elvis 操作符

需要處理程式碼中的空值?可以使用 elvis 操作符,避免您的 “空情況” (null-erplate)。這只是替換空作為值或者返回事件情況的一個小語法。

31 天,從淺到深輕鬆學習 Kotlin
Day 3:String 模板

格式化字串?將$放在變數名的前面去表達字串中的變數和表示式。使用 ${expression} 求表示式的值。

31 天,從淺到深輕鬆學習 Kotlin
Day 4:When 表示式

強大的 switch!Kotlin 的 When 表達幾乎可以匹配任何東西。字面值,列舉,數字範圍。您甚至可以呼叫任意函式!

31 天,從淺到深輕鬆學習 Kotlin
Day 5:迴圈,範圍表示式與解構

for 迴圈在與其他兩種 Kotlin 特性一起使用時可以獲得超級能力:範圍表示式和解構。

31 天,從淺到深輕鬆學習 Kotlin
Day 6:屬性

在 Kotlin 中,類可以具有可變和只讀屬性,預設情況下生成 getter 和 setter。如果需要,您也可以實現自定義的。

31 天,從淺到深輕鬆學習 Kotlin
Day 7:解構宣告

Android KTX 使用解構來分配顏色的元件值。您可以在您的類中使用解構,或者擴充套件現有的類來新增解構。

31 天,從淺到深輕鬆學習 Kotlin
第一週學習小結:

本週以基本知識為主:處理空錯誤,簡化迴圈和條件,屬性,解構架。下一週我們將會深入探索 Kotlin 的更多功能。

第二週

Day 8:簡單的 bundle

準備去通過簡潔的方式去建立 bundle,不呼叫 putString,putInt,或它們的 20 個方法中的任何一個。一個呼叫讓您生成一個新的 bundle,它甚至可以處理 Arrays。

31 天,從淺到深輕鬆學習 Kotlin
Day 9:Parcelize

喜歡 Parcelable 的速度,但不喜歡寫所有的程式碼?和 @Parcelize 打個招呼。

31 天,從淺到深輕鬆學習 Kotlin
Day 10:Data 類和 equality

可以建立具有一個具有處理資料的類嗎?將它們標記為 "Data" 類。並預設實現生成 equals() 方法 - 相當於 hashCode(),toString() 和copy(),並檢查結構是否相等。

31 天,從淺到深輕鬆學習 Kotlin
Day 11:簡化 postDelay

Lambda 非常貼心,使用最後一個引數呼叫語法您可以取消回撥,Callable 和 Runnable,例如 Android KTX 貼心的用一個小包裝來處理 postDelayed。

31 天,從淺到深輕鬆學習 Kotlin
Day 12:預設引數

方法引數的數量是否太多?在函式中指定預設引數值。使用命名引數使程式碼更具可讀性。

31 天,從淺到深輕鬆學習 Kotlin
Day 13:從 Java 程式語言呼叫 Kotlin

在同一個專案中使用 Kotlin 和 Java?您有沒有頂級功能或屬性的課程?預設情況下,編譯器將生成類名稱 YourFileKt。通過使用 @file:JvmName 註釋檔案來更改它。

31 天,從淺到深輕鬆學習 Kotlin
Day 14:在沒有迭代器的情況下迭代型別

迭代器用在了有趣的地方!Android KTX 將迭代器新增到 viewGroup 和 sparseArray。要定義迭代器擴充套件請使用 operator 關鍵字。 Foreach 迴圈將使用副檔名!

31 天,從淺到深輕鬆學習 Kotlin
第二週學習小結

這周我們更深入學了 Kotlin 的特性:簡潔 bundle,迭代,Data,postDelay,預設引數,序列化。下一週我們會了解更多的 Kotlin 特性並且開始探索 Android KTX。

第三週

Day 15:sealed 類

Kotlin 的 sealed 類可以讓您輕鬆的處理錯誤資料,當結合 LiveData 您可以用一個 LiveData 同時代表成功和失敗的路徑,這比用兩個不變數要好。

31 天,從淺到深輕鬆學習 Kotlin
您也可以將 sealed 類用在 RecyclerView 的 adapter 中,非常適合於 ViewHolders —— 用一組乾淨的型別明確地分派給每個持有者。用作表示式時,如果有型別不匹配,編譯器將會出錯。

31 天,從淺到深輕鬆學習 Kotlin
使用 RecyclerViews,如果我們有很多來自 RecyclerView 中 item 的回撥,比如一個點選,分享和刪除 item 的專案,我們可以使用 sealed 類。一個回撥可以處理所有的事情!

31 天,從淺到深輕鬆學習 Kotlin
Day 16:懶載入

懶載入是個好東西!通過使用懶載入,可以省去昂貴的屬性初始化的成本直到它們真正需要。計算值然後儲存併為了未來的任何時候的呼叫。

31 天,從淺到深輕鬆學習 Kotlin
Day 17:Lateinit

Android 中,在 onCreate 或者其它的回撥初始化物件,但在 Kotlin 中不為空的物件必須初始化。那麼怎麼辦呢?可以輸入 lateinit。來承諾最終將會初始化。

31 天,從淺到深輕鬆學習 Kotlin
Day 18:要求 (require) 和檢查 (check)

您方法的引數是有效的嗎?用 require 在使用前可以檢查它們,如果它們是無效的將會丟擲 IllegalArgumentException。

31 天,從淺到深輕鬆學習 Kotlin

您的封閉類的狀態是否正確?可以使用 check 來驗證。如果檢查的值為 false,它將丟擲 IllegalStateException。

31 天,從淺到深輕鬆學習 Kotlin
Day 19:內聯 (InLine)

等不及要使用 lambdas 來生成一個新的介面?kotlin 可以使您制定一個 inline 的方法 -- 這意味著呼叫將替換方法體,用很非常簡單的方法來生成 lambda 的介面。

31 天,從淺到深輕鬆學習 Kotlin
Day 20:運算子過載

用操作符過載快更快速寫 Kotlin。像 Path,Range或 SpannableStrings 這樣的物件允許像加法或減法這樣的操作。通過 Kotlin,您可以實現自己的操作符。

31 天,從淺到深輕鬆學習 Kotlin
Day 21:頂級方法和引數

類的實用方法?將它們新增到原始檔的頂層。在 Java 中,它們被編譯為該類的靜態方法。

31 天,從淺到深輕鬆學習 Kotlin
您是否為您的類定義了靜態常量?使它們成為頂級屬性。它們將被編譯為欄位和靜態訪問器。

31 天,從淺到深輕鬆學習 Kotlin
第三週學習小結:

本週主要討論一些基本的 Kotlin 特性,如運算子過載,內聯,運算子過載,懶載入,以及非常強大的 inLine,並展示了使用 Android KTX 處理內容值,捆綁包和回撥時如何編寫更簡潔的程式碼。

第四周

Day 22:簡單的內容值

將 ContentValues 的強大功能與 Kotlin 的簡潔性相結合。使用 Android KTX 只傳遞一個 Pair <StringKey,Value> 建立 ContentValues。

31 天,從淺到深輕鬆學習 Kotlin
Day 23:DSLs

特定於域的語言可以通過使用型別安全的構建器來完成。它們為簡化 API 做出貢獻;您也可以自己藉助擴充套件 lambdas 和型別安全構建器等功能構建它們。

31 天,從淺到深輕鬆學習 Kotlin
Spek 是一個構建為 Kotlin DSL 的測試庫。 Spek 不使用 @Annotations,而是提供了一種不依賴於反射的型別安全的方式來宣告測試程式碼。

31 天,從淺到深輕鬆學習 Kotlin
Android 上 Kotlin 的另一個 DSL 是 Anko。Anko 允許您使用宣告性程式碼構建 Android 檢視。

31 天,從淺到深輕鬆學習 Kotlin
Day 24:具體化

具體化的概念例子:Android KTX 中的 Context.systemService() 使用泛化來通過泛型傳遞 “真實” 型別。沒有通過 getSystemService。

Android KTX:Context.systemService()

31 天,從淺到深輕鬆學習 Kotlin
Day 25:Delegates

通過 by 用您的工作委託給另一個類。通過類繼承,並將屬性訪問器邏輯與委託者屬性重用。

31 天,從淺到深輕鬆學習 Kotlin
Day 26:延期方法

沒有更多的 Util 類。通過使用擴充套件功能擴充套件類的功能。把您要擴充套件的類的名字放在您新增的方法的名字前面。

擴充套件功能的一些特性:

  • 不是成員函式

  • 不要以任何方式修改原始類

  • 通過靜態型別資訊解決編譯時間

  • 會被編譯為靜態函式

  • 不要多型性

例如:String.toUri()

31 天,從淺到深輕鬆學習 Kotlin
Day 27:Drawable.toBitmap() 輕鬆轉換

如果您曾經將 Drawable 轉換為 Bitmap,那麼您知道需要多少樣?Android KTX 具有一系列功能,可以使您的程式碼在使用圖形包中的類時更加簡潔。

31 天,從淺到深輕鬆學習 Kotlin
Day 28:Sequences, lazy 和 generators

序列是從未存在的列表。序列是迭代器的表親,一次只能懶散地產生一個值。這在使用 map 和 fifter 時非常重要 - 它們將建立序列,而不是為每一步都複製列表!

31 天,從淺到深輕鬆學習 Kotlin
您可以從列表中建立序列或指定下一個功能。如果您永遠不會終止一個序列,它可以是無限長的而不會耗盡記憶體。使用 Kotlin 中的協程您也可以使用生成器!

31 天,從淺到深輕鬆學習 Kotlin
Day 29:更簡單的 Spans

功能強大但很難使用 - 這就是 Spans API 感覺的文字樣式。 Android KTX 為一些最常見的 span 新增了擴充套件功能,並使 API 更易於使用。Android KTX: 可跨越字串的構建器

31 天,從淺到深輕鬆學習 Kotlin
Day 30:updatePadding 擴充套件

通過預設引數擴充套件現有的 API 通常會讓每個人都高興。 Android KTX 允許您使用預設引數在檢視的一側設定填充。一行程式碼可以節省很多程式碼!Android KTX: View.updatePadding

31 天,從淺到深輕鬆學習 Kotlin
Day 31:範圍外 run,let,with,apply

讓我們執行一些標準的 Kotlin 函式!簡短而強大,run,let,with 和 appy 都有一個接收器 (this),可能有一個引數 (it) 並可能有一個返回值。差異如下:

run

31 天,從淺到深輕鬆學習 Kotlin
let

31 天,從淺到深輕鬆學習 Kotlin
with

31 天,從淺到深輕鬆學習 Kotlin
apply

31 天,從淺到深輕鬆學習 Kotlin
第四周學習小結:

本週我們涵蓋了更多語言特性,如 interop,refied 和 sequence,並且在 Android KTX,展示了它幫助您編寫簡潔易讀的程式碼的一些方法。我們也討論了高階特性:領域特定語言 (DSL)。

31 天,從淺到深輕鬆學習 Kotlin
點選此處您可檢視更多 Android 和 Google Play 相關內容資訊

31 天,從淺到深輕鬆學習 Kotlin

相關文章