「Google 出品」31 天,從淺到深輕鬆學習 Kotlin

「Google 出品」31 天,從淺到深輕鬆學習 Kotlin

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

第一週

Day 1:可見性

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 2:Elvis 操作符

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 3:String 模板

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 4:When 表達式

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 5:循環,範圍表達式與解構

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 6:屬性

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Android KTX 使用解構來分配顏色的組件值。您可以在您的類中使用解構,或者擴展現有的類來添加解構。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

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

第二週

Day 8:簡單的 bundle

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 9:Parcelize

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 10:Data 類和 equality

可以創建具有一個具有處理數據的類嗎?將它們標記為 "Data" 類。並默認實現生成 equals 方法 - 相當於 hashCode,toString 和copy,並檢查結構是否相等。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 11:簡化 postDelay

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 12:默認參數

方法參數的數量是否太多?在函數中指定默認參數值。使用命名參數使代碼更具可讀性。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 13:從 Java 編程語言調用 Kotlin

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 14:在沒有迭代器的情況下迭代類型

迭代器用在了有趣的地方!Android KTX 將迭代器添加到 viewGroup 和 sparseArray。要定義迭代器擴展請使用 operator 關鍵字。Foreach 循環將使用擴展名!

「Google 出品」31 天,从浅到深轻松学习 Kotlin

第二週學習小結:這周我們更深入學了 Kotlin 的特性:簡潔 bundle,迭代,Data,postDelay,默認參數,序列化。下一週我們會了解更多的 Kotlin 特性並且開始探索 Android KTX。

第三週

Day 15:sealed 類

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

您也可以將 sealed 類用在 RecyclerView 的 adapter 中,非常適合於 ViewHolders —— 用一組乾淨的類型明確地分派給每個持有者。用作表達式時,如果有類型不匹配,編譯器將會出錯。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

使用 RecyclerViews,如果我們有很多來自 RecyclerView 中 item 的回調,比如一個點擊,分享和刪除 item 的項目,我們可以使用 sealed 類。一個回調可以處理所有的事情!

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 16:懶加載

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 17Lateinit

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 18:要求 (require) 和檢查 (check)

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 19:內聯 (InLine)

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 20:運算符重載

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 21:頂級方法和參數

類的實用方法?將它們添加到源文件的頂層。在 Java 中,它們被編譯為該類的靜態方法。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

您是否為您的類定義了靜態常量?使它們成為頂級屬性。它們將被編譯為字段和靜態訪問器。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

第三週學習小結:本週主要討論一些基本的 Kotlin 特性,如運算符重載,內聯,運算符重載,懶加載,以及非常強大的 inLine,並展示了使用 Android KTX 處理內容值,捆綁包和回調時如何編寫更簡潔的代碼。

第四周

Day 22:簡單的內容值

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 23:DSLs

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Spek 是一個構建為 Kotlin DSL 的測試庫。Spek 不使用 @Annotations,而是提供了一種不依賴於反射的類型安全的方式來聲明測試代碼。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Android 上 Kotlin 的另一個 DSL 是 Anko。Anko 允許您使用聲明性代碼構建 Android 視圖。

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 24:具體化

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

Android KTX:Context.systemService

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 25:Delegates

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 26:延期方法

沒有更多的 Util 類。通過使用擴展功能擴展類的功能。把您要擴展的類的名字放在您添加的方法的名字前面。

擴展功能的一些特性:

  • 不是成員函數

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

  • 通過靜態類型信息解決編譯時間

  • 會被編譯為靜態函數

  • 不要多態性

例如:String.toUri

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 27:Drawable.toBitmap 輕鬆轉換

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 28:Sequences, lazy 和 generators

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

您可以從列表中創建序列或指定下一個功能。如果您永遠不會終止一個序列,它可以是無限長的而不會耗盡內存。使用 Kotlin 中的協程您也可以使用生成器!

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 29:更簡單的 Spans

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 30:updatePadding 擴展

通過默認參數擴展現有的 API 通常會讓每個人都高興。Android KTX 允許您使用默認參數在視圖的一側設置填充。一行代碼可以節省很多代碼!Android KTX: View.updatePa

dding

「Google 出品」31 天,从浅到深轻松学习 Kotlin

Day 31:範圍外 run,let,with,apply

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

run

「Google 出品」31 天,从浅到深轻松学习 Kotlin

let

「Google 出品」31 天,从浅到深轻松学习 Kotlin

with

「Google 出品」31 天,从浅到深轻松学习 Kotlin

apply

「Google 出品」31 天,从浅到深轻松学习 Kotlin

第四周學習小結:

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

「Google 出品」31 天,从浅到深轻松学习 Kotlin

以上就是這期的主要內容。如果您有其他的 Kotlin 相關問題,歡迎您在文章下方給我們留言。


分享到:


相關文章: