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

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

第一周

Day 1:可見性

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

Day 2:Elvis 操作符

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

Day 3:String 模板

格式化字符串?將 $ 放在變量名的前面去表達(dá)字符串中的變量和表達(dá)式润努。使用 $ {expression} 求表達(dá)式的值关斜。

Day 4:When 表達(dá)式

強(qiáng)大的 switch!Kotlin 的 When 表達(dá)幾乎可以匹配任何東西任连。字面值蚤吹,枚舉例诀,數(shù)字范圍随抠。您甚至可以調(diào)用任意函數(shù)!

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

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

Day 6:屬性

在 Kotlin 中,類可以具有可變和只讀屬性扔罪,默認(rèn)情況下生成 getter 和 setter秉沼。如果需要,您也可以實(shí)現(xiàn)自定義的矿酵。

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

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

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

本周以基本知識(shí)為主:處理空錯(cuò)誤敞咧,簡(jiǎn)化循環(huán)和條件,屬性辜腺,解構(gòu)架休建。下一周我們將會(huì)深入探索 Kotlin 的更多功能。

第二周

Day 8:簡(jiǎn)單的 bundle

準(zhǔn)備去通過簡(jiǎn)潔的方式去創(chuàng)建 bundle评疗,不調(diào)用 putString测砂,putInt,或它們的 20 個(gè)方法中的任何一個(gè)百匆。一個(gè)調(diào)用讓您生成一個(gè)新的 bundle砌些,它甚至可以處理 Arrays。

Day 9:Parcelize

喜歡 Parcelable 的速度加匈,但不喜歡寫所有的代碼存璃?和 @Parcelize 打個(gè)招呼。

Day 10:Data 類和 equality

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

Day 11:簡(jiǎn)化 postDelay

Lambda 非常貼心男图,使用最后一個(gè)參數(shù)調(diào)用語法您可以取消回調(diào),Callable 和 Runnable甜橱,例如Android KTX 貼心的用一個(gè)小包裝來處理 postDelayed逊笆。

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

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

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

在同一個(gè)項(xiàng)目中使用 Kotlin 和 Java?您有沒有頂級(jí)功能或?qū)傩缘恼n程镊掖?默認(rèn)情況下乃戈,編譯器將生成類名稱 YourFileKt。通過使用 @file:JvmName 注釋文件來更改它亩进。

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

迭代器用在了有趣的地方症虑!Android KTX 將迭代器添加到 viewGroup 和 sparseArray。要定義迭代器擴(kuò)展請(qǐng)使用 operator 關(guān)鍵字归薛。 Foreach 循環(huán)將使用擴(kuò)展名谍憔!

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

這周我們更深入學(xué)了 Kotlin 的特性:簡(jiǎn)潔 bundle,迭代主籍,Data习贫,postDelay,默認(rèn)參數(shù)千元,序列化苫昌。下一周我們會(huì)了解更多的 Kotlin 特性并且開始探索 Android KTX。

第三周

Day 15:sealed 類

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

您也可以將 sealed 類用在 RecyclerView 的 adapter 中涕烧,非常適合于 ViewHolders —— 用一組干凈的類型明確地分派給每個(gè)持有者月而。用作表達(dá)式時(shí),如果有類型不匹配议纯,編譯器將會(huì)出錯(cuò)父款。

使用 RecyclerViews,如果我們有很多來自 RecyclerView 中 item 的回調(diào)瞻凤,比如一個(gè)點(diǎn)擊憨攒,分享和刪除 item 的項(xiàng)目,我們可以使用 sealed 類阀参。一個(gè)回調(diào)可以處理所有的事情肝集!

Day 16:懶加載

懶加載是個(gè)好東西!通過使用懶加載蛛壳,可以省去昂貴的屬性初始化的成本直到它們真正需要杏瞻。計(jì)算值然后保存并為了未來的任何時(shí)候的調(diào)用所刀。

Day 17Lateinit

Android 中,在 onCreate 或者其它的回調(diào)初始化對(duì)象捞挥,但在 Kotlin 中不為空的對(duì)象必須初始化浮创。那么怎么辦呢?可以輸入 lateinit砌函。來承諾最終將會(huì)初始化斩披。

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

您方法的參數(shù)是有效的嗎?用 require 在使用前可以檢查它們讹俊,如果它們是無效的將會(huì)拋出IllegalArgumentException垦沉。

您的封閉類的狀態(tài)是否正確?可以使用 check 來驗(yàn)證劣像。如果檢查的值為 false乡话,它將拋出 IllegalStateException摧玫。

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

等不及要使用 lambdas 來生成一個(gè)新的接口耳奕?kotlin 可以使您制定一個(gè) inline 的方法 -- 這意味著調(diào)用將替換方法體,用很非常簡(jiǎn)單的方法來生成 lambda 的接口诬像。

Day 20:運(yùn)算符重載

用操作符重載快更快速寫 Kotlin屋群。像 Path,Range或 SpannableStrings 這樣的對(duì)象允許像加法或減法這樣的操作坏挠。通過 Kotlin芍躏,您可以實(shí)現(xiàn)自己的操作符。

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

類的實(shí)用方法降狠?將它們添加到源文件的頂層对竣。在 Java 中,它們被編譯為該類的靜態(tài)方法榜配。

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

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

本周主要討論一些基本的 Kotlin 特性临燃,如運(yùn)算符重載,內(nèi)聯(lián)烙心,運(yùn)算符重載膜廊,懶加載,以及非常強(qiáng)大的 inLine,并展示了使用 Android KTX 處理內(nèi)容值淫茵,捆綁包和回調(diào)時(shí)如何編寫更簡(jiǎn)潔的代碼爪瓜。

第四周

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

將 ContentValues 的強(qiáng)大功能與 Kotlin 的簡(jiǎn)潔性相結(jié)合。使用 Android KTX 只傳遞一個(gè) Pair 創(chuàng)建 ContentValues匙瘪。?

Day 23:DSLs

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

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

Android 上 Kotlin 的另一個(gè) DSL 是 Anko菲驴。Anko 允許您使用聲明性代碼構(gòu)建 Android 視圖荐吵。

Day 24:具體化

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

Android KTX:Context.systemService()

Day 25:Delegates

通過 by 用您的工作委托給另一個(gè)類先煎。通過類繼承,并將屬性訪問器邏輯與委托者屬性重用巧涧。

Day 26:延期方法

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

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

不是成員函數(shù)

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

通過靜態(tài)類型信息解決編譯時(shí)間

會(huì)被編譯為靜態(tài)函數(shù)

不要多態(tài)性

例如:String.toUri()

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

如果您曾經(jīng)將 Drawable 轉(zhuǎn)換為 Bitmap占锯,那么您知道需要多少樣?Android KTX 具有一系列功能缩筛,可以使您的代碼在使用圖形包中的類時(shí)更加簡(jiǎn)潔消略。

Day 28:Sequences, lazy 和 generators

序列是從未存在的列表。序列是迭代器的表親瞎抛,一次只能懶散地產(chǎn)生一個(gè)值艺演。這在使用 map 和 fifter 時(shí)非常重要 - 它們將創(chuàng)建序列,而不是為每一步都復(fù)制列表桐臊!

您可以從列表中創(chuàng)建序列或指定下一個(gè)功能胎撤。如果您永遠(yuǎn)不會(huì)終止一個(gè)序列,它可以是無限長(zhǎng)的而不會(huì)耗盡內(nèi)存断凶。使用 Kotlin 中的協(xié)程您也可以使用生成器伤提!

Day 29:更簡(jiǎn)單的 Spans

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

Day 30:updatePadding 擴(kuò)展

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

Day 31:范圍外 run,let稽穆,with冠王,apply

讓我們運(yùn)行一些標(biāo)準(zhǔn)的 Kotlin 函數(shù)!簡(jiǎn)短而強(qiáng)大舌镶,run柱彻,let豪娜,with 和 appy 都有一個(gè)接收器 (this),可能有一個(gè)參數(shù) (it) 并可能有一個(gè)返回值哟楷。差異如下:

run

let

with

apply

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

本周我們涵蓋了更多語言特性瘤载,如 interop,refied 和 sequence,并且在 Android KTX卖擅,展示了它幫助您編寫簡(jiǎn)潔易讀的代碼的一些方法鸣奔。我們也討論了高級(jí)特性:領(lǐng)域特定語言 (DSL)。

以上就是這期的主要內(nèi)容惩阶。如果您有其他的 Kotlin 相關(guān)問題挎狸,歡迎您在文章下方給我們留言。

點(diǎn)擊此處?您可查看更多AndroidGoogle Play相關(guān)內(nèi)容信息


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末断楷,一起剝皮案震驚了整個(gè)濱河市锨匆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冬筒,老刑警劉巖恐锣,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異账千,居然都是意外死亡侥蒙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門匀奏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人学搜,你說我怎么就攤上這事娃善。” “怎么了瑞佩?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵聚磺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我炬丸,道長(zhǎng)瘫寝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任稠炬,我火速辦了婚禮焕阿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘首启。我一直安慰自己暮屡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布毅桃。 她就那樣靜靜地躺著褒纲,像睡著了一般准夷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上莺掠,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天衫嵌,我揣著相機(jī)與錄音,去河邊找鬼彻秆。 笑死渐扮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掖棉。 我是一名探鬼主播墓律,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼幔亥!你這毒婦竟也來了耻讽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤帕棉,失蹤者是張志新(化名)和其女友劉穎针肥,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體香伴,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慰枕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了即纲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具帮。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖低斋,靈堂內(nèi)的尸體忽然破棺而出蜂厅,到底是詐尸還是另有隱情,我是刑警寧澤膊畴,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布掘猿,位于F島的核電站,受9級(jí)特大地震影響唇跨,放射性物質(zhì)發(fā)生泄漏稠通。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一买猖、第九天 我趴在偏房一處隱蔽的房頂上張望改橘。 院中可真熱鬧,春花似錦政勃、人聲如沸十性。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至讽挟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丸冕,已是汗流浹背耽梅。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胖烛,地道東北人眼姐。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像佩番,于是被迫代替她去往敵國(guó)和親众旗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,747評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理趟畏,服務(wù)發(fā)現(xiàn)贡歧,斷路器,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 《商道》 研究規(guī)律赋秀,應(yīng)用規(guī)律利朵; (1),才能猎莲;“才能” 就是能解決問題的能力绍弟。協(xié)調(diào)周圍人辦事的能力;找到這些規(guī)律著洼,...
    笑曰閱讀 235評(píng)論 0 0
  • 至到多年以后的今天樟遣,我才仿佛明白夜晚的門對(duì)我來說意味著什么? 暑假放假回到農(nóng)村老家郭脂,老家有個(gè)習(xí)慣年碘,夏天...
    安妮小同學(xué)閱讀 689評(píng)論 3 1
  • 深夜回到家,看到小區(qū)門口的老大爺已經(jīng)裹上了厚厚的棉衣展鸡,換上了冬季的果品,守著自己的那個(gè)小推車埃难,大約是冷莹弊,老大爺不停...
    狐言亂語_閱讀 390評(píng)論 0 3