文章來(lái)源
Kotlin 系統(tǒng)入門(mén)到進(jìn)階 視頻教程
這是什么?這是作者最新制作的系統(tǒng)講解 Kotlin 的視頻教程,相比較早錄制的視頻,這套視頻在專業(yè)團(tuán)隊(duì)的協(xié)助下完成,內(nèi)容更適合初學(xué)者入門(mén)學(xué)習(xí);另外,由于 Kotlin 版本更新非???,新視頻也結(jié)合了 1.1 的新特性為大家展開(kāi)講解,希望能對(duì)大家有幫助~
視頻地址: http://coding.imooc.com/class/108.html
第1章 課程介紹
本章主要介紹什么是Kotlin,課程安排,以及開(kāi)發(fā)環(huán)境的配置。
第2章 數(shù)據(jù)類(lèi)型
本章主要講解 Kotlin 的基本詞法,從類(lèi)型系統(tǒng)入手為大家介紹 Kotlin 中都存在哪些類(lèi)型,以及相關(guān)的特性。(知識(shí)點(diǎn):基本類(lèi)型、類(lèi)與對(duì)象、空類(lèi)型、智能類(lèi)型轉(zhuǎn)換、包、區(qū)間、數(shù)組)
第3章 程序結(jié)構(gòu)
本章主要講解 Kotlin 的句法,從程序結(jié)構(gòu)入手為大家介紹 Kotlin 有哪些表達(dá)式,有哪些語(yǔ)句,如何定義常量、變量以及函數(shù)等等。(知識(shí)點(diǎn):常量與變量 、函數(shù)、Lambda表達(dá)式、類(lèi)成員、運(yùn)算符、分支表達(dá)式、循環(huán)語(yǔ)句、異常捕獲 、函數(shù)的具名參數(shù)、函數(shù)的變長(zhǎng)參數(shù)、函數(shù)的默認(rèn)參數(shù)、案例:一個(gè)命令行計(jì)算器、導(dǎo)出可執(zhí)行程...
第4章 面向?qū)ο?/h2>
本章深入探討 Kotlin 的面向?qū)ο蟮闹R(shí),包括抽象、繼承,擴(kuò)展成員、屬性代理以及常見(jiàn)類(lèi)的概念及特性。(知識(shí)點(diǎn):面向?qū)ο蟮幕靖拍?、抽象?lèi)與接口、 子承父業(yè)的故事、類(lèi)及其成員的可見(jiàn)性、object、伴生對(duì)象與靜態(tài)成員、方法重載和默認(rèn)參數(shù)、擴(kuò)展成員、屬性代理、數(shù)據(jù)類(lèi)、內(nèi)部類(lèi)、枚舉、密封類(lèi))...
第5章 高階函數(shù)
本章深入探討 Kotlin 的高階函數(shù)的知識(shí),學(xué)習(xí)常見(jiàn)的內(nèi)置高階函數(shù)的用法,并對(duì)常見(jiàn)高階函數(shù)的相關(guān)概念如閉包、復(fù)合、科里化等做簡(jiǎn)要介紹。(知識(shí)點(diǎn):基本概念、常見(jiàn)高階函數(shù)、尾遞歸優(yōu)化、閉包、函數(shù)復(fù)合、科里化 Currying、 偏函數(shù)、一個(gè)統(tǒng)計(jì)字符個(gè)數(shù)的小例子)...
第6章 領(lǐng)域特定語(yǔ)言 DSL
本章介紹領(lǐng)域特定語(yǔ)言 DSL 的概念,以及如何使用 Kotlin 編寫(xiě) DSL。(知識(shí)點(diǎn):DSL 的基本概念、案例:HTML DSL、Gradle Kotlin 腳本)
第7章 協(xié)程 Coroutine
本章介紹 Kotlin 的協(xié)程,主要包括基本 API 的使用,協(xié)程執(zhí)行流程的分析,以及協(xié)程相關(guān)應(yīng)用的案例和框架介紹。(知識(shí)點(diǎn):基本概念、案例:異步下載圖片、 協(xié)程的原理剖析、序列生成器、Kotlinx.coroutines框架簡(jiǎn)介)
第8章 Kotlin與 Java 混合開(kāi)發(fā)
本章主要對(duì) Kotlin 與 Java 混合開(kāi)發(fā)常見(jiàn)的問(wèn)題進(jìn)行了梳理。(知識(shí)點(diǎn):基本互操作、SAM轉(zhuǎn)換、正則表達(dá)式、集合框架、IO操作、裝箱和拆箱、注解處理器)
第9章 Kotlin的應(yīng)用與展望
本章主要為大家演示如何編寫(xiě) Kotlin 腳本,如何開(kāi)發(fā)服務(wù)端程序, 如何開(kāi)發(fā) Android 應(yīng)用,如何開(kāi)發(fā)前端程序,以及如何使用 Kotlin-Native 將 Kotlin 直接編譯為可執(zhí)行程序并在操作系統(tǒng)上直接運(yùn)行。(知識(shí)點(diǎn):Kotlin的應(yīng)用場(chǎng)景、 Kotlin-Script的例子、Kotlin-Android的例子、Kotlin-JavaScript的例子、 Kotlin-springboot的例子、Kotlin-Native 的例子)
<已過(guò)時(shí)>Kotlin從入門(mén)到『放棄』系列 視頻教程
發(fā)現(xiàn)有人在淘寶店上賣(mài)這套視頻哈,大家不要去買(mǎi)。。。直接在這里下載多好
隨著Kotlin越來(lái)越成熟穩(wěn)定,作者已經(jīng)開(kāi)始在生產(chǎn)環(huán)境中使用它。考慮到目前國(guó)內(nèi)資料較少,作者錄制了一套視頻教程,希望以此拋磚引玉,讓 Kotlin 在國(guó)內(nèi)火起來(lái)。
個(gè)人水平有限,不足之處歡迎大家發(fā)郵件到 [bennyhuo@println.net](mailto: bennyhuo@println.net),謝謝大家!
介紹
視頻從2016年10月初開(kāi)始發(fā)布,更新至12月中旬完結(jié)。精力有限,后續(xù)暫時(shí)每周一通過(guò)公眾號(hào)推送 Kotlin 及 Java 生態(tài)的一些文章,大家有選題也可以直接聯(lián)系作者,目前已經(jīng)有兩篇是基于大家的反饋?zhàn)珜?xiě)的,反饋也比較不錯(cuò),謝謝大家的關(guān)注與支持。
關(guān)注微信公眾號(hào):Kotlin, 獲取最新視頻更新動(dòng)態(tài)
<img src="arts/Kotlin.jpg" width="250px"/>
加入 QQ 群 Kotlin ,162452394:
<img src="arts/e_group.png" width="250px"/>
目錄
01 Kotlin 簡(jiǎn)介
簡(jiǎn)要介紹下什么是 Kotlin,新語(yǔ)言太多了,大家為什么要接觸 Kotlin 呢?因?yàn)樗碎L(zhǎng)得與 Java 不太像以外,其他的都差不多~
02 Hello World
千里之行,始于Hello World!
03 使用Gradle編寫(xiě)程序簡(jiǎn)介(可選)
這年頭,寫(xiě) Java 系的代碼,不知道 Gradle 怎么行呢?
04 集合遍歷 map
放下 i++,你不知道 map 已經(jīng)占領(lǐng)世界了么?以前作者以為 map-reduce 很牛逼,后來(lái)才知道就是數(shù)據(jù)迭代處理嘛。
05 集合扁平化 flatMap
這個(gè)可以說(shuō)是 map 的一個(gè)加強(qiáng)版,返回的仍然是開(kāi)一個(gè)可迭代的集合,用哪個(gè)您自己看需求~
06 枚舉類(lèi)型與When表達(dá)式
Kotlin 丟掉了 switch,卻引進(jìn)了 when,這二者看上去極其相似,不過(guò)后者卻要強(qiáng)大得多。至于枚舉嘛,還是 Java 枚舉的老樣子。
07 在 RxJava 中使用 Lambda
這一期通過(guò)一個(gè)統(tǒng)計(jì)文章中字符數(shù)的小程序進(jìn)一步給大家呈現(xiàn) Lambda 的威力,也向大家展示一下如何在 Kotlin 當(dāng)中優(yōu)雅地使用 RxJava。作者不做教科書(shū),所以如果大家對(duì)概念感興趣,可以直接閱讀官方 API
RxJava 是一個(gè)非常流行的 Java Reactive 框架,函數(shù)式的數(shù)據(jù)操作使得 Lambda 表達(dá)式可以充分體現(xiàn)自己的優(yōu)勢(shì),比起 Java 的冗長(zhǎng),你會(huì)看到一段非常漂亮簡(jiǎn)潔的代碼。建議大家先閱讀 RxJava 的官方文章以對(duì)其有一些基本的認(rèn)識(shí)。
08 使用 Retrofit 發(fā)送 GET 請(qǐng)求
Retrofit 是 Square 的 Jake 大神開(kāi)源的RESTful 網(wǎng)絡(luò)請(qǐng)求框架,用它發(fā)送請(qǐng)求的感覺(jué)會(huì)讓你感覺(jué)爽爆的。作者這里還有幾篇文章,以及一個(gè)作者 hack 過(guò)的分支 HackRetrofit,有興趣的童鞋可以一起探討下~
09 尾遞歸優(yōu)化
尾遞歸,顧名思義,就是遞歸中調(diào)用自身的部分在函數(shù)體的最后一句。我們知道,遞歸調(diào)用對(duì)于棧大小的考驗(yàn)是非常大的,也經(jīng)常會(huì)因?yàn)檫@個(gè)導(dǎo)致 StackOverflow,所以尾遞歸優(yōu)化也是大家比較關(guān)注的一個(gè)話題。Kotlin 支持語(yǔ)法層面的尾遞歸優(yōu)化,這在其他語(yǔ)言里面是不多見(jiàn)的。
10 單例
單例大家一定都不陌生,只要你動(dòng)手寫(xiě)一個(gè)程序,就免不了要設(shè)計(jì)出一些全局存在且唯一的對(duì)象,他們就適合采用單例模式編寫(xiě)。在 Java 里面,單例模式的寫(xiě)法常見(jiàn)的有好幾種,雖然簡(jiǎn)單卻也是涉及了一些有意思的話題,那么在 Kotlin 當(dāng)中我們要怎么設(shè)計(jì)單例程序呢?
11 Sealed Class
枚舉類(lèi)型可以很好的限制一個(gè)類(lèi)型的實(shí)例個(gè)數(shù),比如 State 枚舉有兩種類(lèi)型 IDLE 和 BUSY 兩種狀態(tài),用枚舉來(lái)描述再合適不過(guò)。不過(guò),如果你想要設(shè)計(jì)子類(lèi)個(gè)數(shù)有限的數(shù)據(jù)結(jié)構(gòu),比如指令,指令的類(lèi)型通常是確定的,不過(guò)對(duì)于某些有參數(shù)的指令每一次都使用同一個(gè)實(shí)例反而不合適,這時(shí)候就需要 Sealed Class。
12 Json數(shù)據(jù)引發(fā)的血案
Json 數(shù)據(jù)可真是大紅大紫一番,它實(shí)在是太容易理解了,隨著 Js 的火爆它就更加『肆無(wú)忌憚』起來(lái)。我們?cè)?Java/Kotlin 當(dāng)中解析它的時(shí)候經(jīng)常會(huì)用到 Gson 這個(gè)庫(kù),用它來(lái)解析數(shù)據(jù)究竟會(huì)遇到哪些問(wèn)題?本期主要圍繞 Json 解析的幾個(gè)小例子,給大家展示一下 Java/Kotlin 的偽泛型設(shè)計(jì)的問(wèn)題,以及不完整的數(shù)據(jù)的解析對(duì)語(yǔ)言本身特性的沖擊。
13 kapt 以及它的小伙伴們
首先感謝 @CodingPapi,這一期的內(nèi)容主要來(lái)自于他的建議。
Kotiln 對(duì)于注解的支持情況在今年(2016)取得了較大的成果,現(xiàn)在除了對(duì) @Inherited 這個(gè)注解的支持還不夠之外,試用了一下沒(méi)有發(fā)現(xiàn)太大的問(wèn)題。關(guān)于 kapt,官方的文章羅列下來(lái),其中
kapt: Annotation Processing for Kotlin
已經(jīng)過(guò)時(shí)了,大家可以閱讀下了解其中提到的三個(gè)方案Better Annotation Processing: Supporting Stubs in kapt
提到的實(shí)現(xiàn)其實(shí)基本上就是現(xiàn)在的正式版Kotlin 1.0.4 is here
提到了 kapt 的正式發(fā)布,需要注意的是,kapt 的使用方法有些變化,需要apply plugin: 'kotlin-kapt'
本期主要通過(guò)一個(gè)簡(jiǎn)單的 Dagger2 實(shí)例給大家展示了注解在 Kotlin 當(dāng)中的使用,看上去其實(shí)與在 Java 中使用區(qū)別不大,生成的源碼也暫時(shí)是 Java 代碼,不過(guò)這都不重要了,反正是要編譯成 class 文件的。
后面我們又簡(jiǎn)單分析了一下 Dagger2 以及 ButterKnife 的源碼(有興趣的話也可以看下作者直接對(duì)后者進(jìn)行分析和 Hack 的一篇文章:深入淺出 ButterKnife,聽(tīng)說(shuō)你還在 findViewById?),其實(shí)自己實(shí)現(xiàn)一個(gè)注解處理器是非常容易的,類(lèi)似的框架還有androidannotations,它的源碼大家可以自行閱讀。
通過(guò)這個(gè)例子,我們其實(shí)發(fā)現(xiàn) kapt 還是有一些不完善的地方,主要是:
- 不支持 @Inherited
- 生成的源碼需要手動(dòng)添加到 SourceSets 中
- 編譯時(shí)有時(shí)候需要手動(dòng)操作一下 gradle 的 build 才能生成源碼(這一點(diǎn)大家注意下就行了,我在視頻中并沒(méi)有提到)
不過(guò)總體來(lái)講,kapt 的現(xiàn)狀還是不錯(cuò)的,相信不久的將來(lái)這些問(wèn)題都將不是問(wèn)題。
14 Kotlin 與 Java 共存 (1)
你想要追求代碼簡(jiǎn)潔、美觀、精致,你應(yīng)該傾向于使用 Kotlin,而如果你想要追求代碼的功能強(qiáng)大,甚至有些黑科技的感覺(jué),那 Java 還是當(dāng)仁不讓的。
說(shuō)了這么多,還是那句話,讓他們共存,各取所長(zhǎng)。
那么問(wèn)題來(lái)了,怎么共存呢?雖然一說(shuō)理論我們都知道,跑在 Jvm 上面的語(yǔ)言最終都是要編成 class 文件的,在這個(gè)層面大家都是 Java 虛擬機(jī)的字節(jié)碼,可他們?cè)诰幾g之前畢竟還是有不少差異的,這可如何是好?
正所謂兵來(lái)將擋水來(lái)土掩,有多少差異,就要有多少對(duì)策,這一期我們先講在 Java 中調(diào)用 Kotlin。
15 Kotlin 與 Java 共存 (2)
上一期我們簡(jiǎn)單討論了幾個(gè) Java 調(diào)用 Kotlin 的場(chǎng)景,這一期我們主要討論相反的情況:如何在 Kotlin 當(dāng)中調(diào)用 Java 代碼。
除了視頻中提到的點(diǎn)之外還有一些細(xì)節(jié),比如異常的捕獲,集合類(lèi)型的映射等等,大家自行參考官方文檔即可。在了解了這些之后,你就可以放心大膽的在你的項(xiàng)目中慢慢滲透 Kotlin,讓你的代碼逐漸走向簡(jiǎn)潔與精致了。