kotlin

31 天,從淺到深輕松學(xué)習(xí) Kotlin

在這篇文章中:

  • [第一周](javascript:;)
  • [第二周](javascript:;)
  • [第三周](javascript:;)
  • [第四周](javascript:;)
img

這篇文章介紹開發(fā)者用 31 天學(xué)習(xí) Kotlin 的心得蜻拨,深入淺出地介紹了 Kotlin 的一些基本特性以及高級用法剂公,對處于不同階段的 Kotlin 開發(fā)者來說,在提高開發(fā)效率和了解 Kotlin 提供一些參考椎咧,希望可以對大家有所幫助淫痰。

第一周

Day 1:可見性

在 Kotlin 中一切都是默認(rèn) public 的。并且 Kotlin 還有一套豐富的可見性修飾符循衰,例如:private, protected, internal饿序。它們每個都以不同的方式降低了可見性。

img

Day 2:Elvis 操作符

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

img

Day 3:String 模板

格式化字符串?將放在變量名的前面去表達(dá)字符串中的變量和表達(dá)式徒蟆。使用{expression} 求表達(dá)式的值胁出。

img

Day 4:When 表達(dá)式

強大的 switch!Kotlin 的 When 表達(dá)幾乎可以匹配任何東西段审。字面值全蝶,枚舉,數(shù)字范圍。您甚至可以調(diào)用任意函數(shù)抑淫!

img

Day 5:循環(huán)绷落,范圍表達(dá)式與解構(gòu)

for 循環(huán)在與其他兩種 Kotlin 特性一起使用時可以獲得超級能力:范圍表達(dá)式和解構(gòu)。

Day 6:屬性

在 Kotlin 中始苇,類可以具有可變和只讀屬性砌烁,默認(rèn)情況下生成 getter 和 setter。如果需要催式,您也可以實現(xiàn)自定義的函喉。

img

Day 7:解構(gòu)聲明

Android KTX 使用解構(gòu)來分配顏色的組件值。您可以在您的類中使用解構(gòu)荣月,或者擴(kuò)展現(xiàn)有的類來添加解構(gòu)管呵。

img

第一周學(xué)習(xí)小結(jié):

本周以基本知識為主:處理空錯誤,簡化循環(huán)和條件哺窄,屬性捐下,解構(gòu)架。下一周我們將會深入探索 Kotlin 的更多功能堂氯。

第二周

Day 8:簡單的 bundle

準(zhǔn)備去通過簡潔的方式去創(chuàng)建 bundle蔑担,不調(diào)用 putString,putInt咽白,或它們的 20 個方法中的任何一個啤握。一個調(diào)用讓您生成一個新的 bundle,它甚至可以處理 Arrays晶框。

img

Day 9:Parcelize

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

img

Day 10:Data 類和 equality

可以創(chuàng)建具有一個具有處理數(shù)據(jù)的類嗎蹲蒲?將它們標(biāo)記為 "Data" 類。并默認(rèn)實現(xiàn)生成 equals() 方法 - 相當(dāng)于 hashCode()侵贵,toString() 和copy()届搁,并檢查結(jié)構(gòu)是否相等。

img

Day 11:簡化 postDelay

Lambda 非常貼心窍育,使用最后一個參數(shù)調(diào)用語法您可以取消回調(diào)卡睦,Callable 和 Runnable,例如 Android KTX 貼心的用一個小包裝來處理 postDelayed漱抓。

img

Day 12:默認(rèn)參數(shù)

方法參數(shù)的數(shù)量是否太多表锻?在函數(shù)中指定默認(rèn)參數(shù)值。使用命名參數(shù)使代碼更具可讀性乞娄。

Day 13:從 Java 編程語言調(diào)用 Kotlin

在同一個項目中使用 Kotlin 和 Java瞬逊?您有沒有頂級功能或?qū)傩缘恼n程显歧?默認(rèn)情況下,編譯器將生成類名稱 YourFileKt确镊。通過使用 @file:JvmName 注釋文件來更改它士骤。

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

迭代器用在了有趣的地方!Android KTX 將迭代器添加到 viewGroup 和 sparseArray骚腥。要定義迭代器擴(kuò)展請使用 operator 關(guān)鍵字敦间。 Foreach 循環(huán)將使用擴(kuò)展名!

第二周學(xué)習(xí)小結(jié)

這周我們更深入學(xué)了 Kotlin 的特性:簡潔 bundle束铭,迭代廓块,Data,postDelay契沫,默認(rèn)參數(shù)带猴,序列化。下一周我們會了解更多的 Kotlin 特性并且開始探索 Android KTX懈万。

第三周

Day 15:sealed 類

Kotlin 的 sealed 類可以讓您輕松的處理錯誤數(shù)據(jù)拴清,當(dāng)結(jié)合 LiveData 您可以用一個 LiveData 同時代表成功和失敗的路徑,這比用兩個不變量要好会通。

您也可以將 sealed 類用在 RecyclerView 的 adapter 中口予,非常適合于 ViewHolders —— 用一組干凈的類型明確地分派給每個持有者。用作表達(dá)式時涕侈,如果有類型不匹配沪停,編譯器將會出錯。

使用 RecyclerViews裳涛,如果我們有很多來自 RecyclerView 中 item 的回調(diào)木张,比如一個點擊,分享和刪除 item 的項目端三,我們可以使用 sealed 類舷礼。一個回調(diào)可以處理所有的事情!

Day 16:懶加載

懶加載是個好東西郊闯!通過使用懶加載妻献,可以省去昂貴的屬性初始化的成本直到它們真正需要。計算值然后保存并為了未來的任何時候的調(diào)用团赁。

Day 17:Lateinit

Android 中育拨,在 onCreate 或者其它的回調(diào)初始化對象,但在 Kotlin 中不為空的對象必須初始化然痊。那么怎么辦呢?可以輸入 lateinit屉符。來承諾最終將會初始化剧浸。

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

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

您的封閉類的狀態(tài)是否正確嫌变?可以使用 check 來驗證。如果檢查的值為 false躬它,它將拋出 IllegalStateException腾啥。

Day 19:內(nèi)聯(lián) (InLine)

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

img

Day 20:運算符重載

用操作符重載快更快速寫 Kotlin。像 Path组贺,Range或 SpannableStrings 這樣的對象允許像加法或減法這樣的操作凸舵。通過 Kotlin,您可以實現(xiàn)自己的操作符失尖。

img

Day 21:頂級方法和參數(shù)

類的實用方法啊奄?將它們添加到源文件的頂層。在 Java 中掀潮,它們被編譯為該類的靜態(tài)方法菇夸。

img

您是否為您的類定義了靜態(tài)常量?使它們成為頂級屬性仪吧。它們將被編譯為字段和靜態(tài)訪問器庄新。

img

第三周學(xué)習(xí)小結(jié):

本周主要討論一些基本的 Kotlin 特性,如運算符重載邑商,內(nèi)聯(lián)摄咆,運算符重載,懶加載人断,以及非常強大的 inLine,并展示了使用 Android KTX 處理內(nèi)容值吭从,捆綁包和回調(diào)時如何編寫更簡潔的代碼。

第四周

Day 22:簡單的內(nèi)容值

將 ContentValues 的強大功能與 Kotlin 的簡潔性相結(jié)合恶迈。使用 Android KTX 只傳遞一個 Pair <StringKey涩金,Value> 創(chuàng)建 ContentValues。

img

Day 23:DSLs

特定于域的語言可以通過使用類型安全的構(gòu)建器來完成暇仲。它們?yōu)楹喕?API 做出貢獻(xiàn)步做;您也可以自己借助擴(kuò)展 lambdas 和類型安全構(gòu)建器等功能構(gòu)建它們。

img

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

img

Android 上 Kotlin 的另一個 DSL 是 Anko斥滤。Anko 允許您使用聲明性代碼構(gòu)建 Android 視圖将鸵。

Day 24:具體化

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

Android KTX:Context.systemService()

Day 25:Delegates

通過 by 用您的工作委托給另一個類顶掉。通過類繼承草娜,并將屬性訪問器邏輯與委托者屬性重用。

Day 26:延期方法

沒有更多的 Util 類痒筒。通過使用擴(kuò)展功能擴(kuò)展類的功能宰闰。把您要擴(kuò)展的類的名字放在您添加的方法的名字前面。

擴(kuò)展功能的一些特性:

  • 不是成員函數(shù)
  • 不要以任何方式修改原始類
  • 通過靜態(tài)類型信息解決編譯時間
  • 會被編譯為靜態(tài)函數(shù)
  • 不要多態(tài)性

例如:String.toUri()

Day 27:Drawable.toBitmap() 輕松轉(zhuǎn)換

如果您曾經(jīng)將 Drawable 轉(zhuǎn)換為 Bitmap簿透,那么您知道需要多少樣移袍?Android KTX 具有一系列功能,可以使您的代碼在使用圖形包中的類時更加簡潔萎战。

Day 28:Sequences, lazy 和 generators

序列是從未存在的列表咐容。序列是迭代器的表親,一次只能懶散地產(chǎn)生一個值蚂维。這在使用 map 和 fifter 時非常重要 - 它們將創(chuàng)建序列戳粒,而不是為每一步都復(fù)制列表!

img

您可以從列表中創(chuàng)建序列或指定下一個功能虫啥。如果您永遠(yuǎn)不會終止一個序列蔚约,它可以是無限長的而不會耗盡內(nèi)存。使用 Kotlin 中的協(xié)程您也可以使用生成器涂籽!

img

Day 29:更簡單的 Spans

功能強大但很難使用 - 這就是 Spans API 感覺的文本樣式苹祟。 Android KTX 為一些最常見的 span 添加了擴(kuò)展功能,并使 API 更易于使用评雌。Android KTX: 可跨越字符串的構(gòu)建器

img

Day 30:updatePadding 擴(kuò)展

通過默認(rèn)參數(shù)擴(kuò)展現(xiàn)有的 API 通常會讓每個人都高興树枫。 Android KTX 允許您使用默認(rèn)參數(shù)在視圖的一側(cè)設(shè)置填充。一行代碼可以節(jié)省很多代碼景东!Android KTX: View.updatePadding

img

Day 31:范圍外 run砂轻,let,with斤吐,apply

讓我們運行一些標(biāo)準(zhǔn)的 Kotlin 函數(shù)搔涝!簡短而強大,run和措,let庄呈,with 和 appy 都有一個接收器 (this),可能有一個參數(shù) (it) 并可能有一個返回值派阱。差異如下:

run

img

let

img

with

img

apply

img

第四周學(xué)習(xí)小結(jié):

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市彩届,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌誓酒,老刑警劉巖樟蠕,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異靠柑,居然都是意外死亡寨辩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門歼冰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靡狞,“玉大人,你說我怎么就攤上這事隔嫡〉榕拢” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵腮恩,是天一觀的道長梢杭。 經(jīng)常有香客問我,道長秸滴,這世上最難降的妖魔是什么武契? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮荡含,結(jié)果婚禮上咒唆,老公的妹妹穿的比我還像新娘。我一直安慰自己释液,他們只是感情好全释,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著均澳,像睡著了一般恨溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上找前,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天糟袁,我揣著相機(jī)與錄音,去河邊找鬼躺盛。 笑死项戴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的槽惫。 我是一名探鬼主播周叮,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼辩撑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仿耽?” 一聲冷哼從身側(cè)響起合冀,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎项贺,沒想到半個月后君躺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篮奄,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡市袖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年尼酿,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞬矩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼奢。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡墓贿,死狀恐怖祥款,靈堂內(nèi)的尸體忽然破棺而出较锡,到底是詐尸還是另有隱情完残,我是刑警寧澤伏钠,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站谨设,受9級特大地震影響贝润,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铝宵,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一打掘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹏秋,春花似錦尊蚁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至百拓,卻和暖如春琴锭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衙传。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工决帖, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓖捶。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓地回,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刻像,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353