本書不是一本簡單介紹Kotlin語法應(yīng)用的圖書,而是一部專注于幫助讀者深入理解Kotlin的設(shè)計(jì)理念,指導(dǎo)讀者實(shí)現(xiàn)Kotlin高層次開發(fā)的實(shí)戰(zhàn)型著作。書中深入介紹了Kotlin的核心語言特性、設(shè)計(jì)模式、函數(shù)式編程、異步開發(fā)等內(nèi)容,并以Android和Web兩個平臺為背景,演示了Kotlin的實(shí)戰(zhàn)應(yīng)用。
全書共13章,分為4個部分:
熱身篇—Kotlin基礎(chǔ)(第1~2章),簡單介紹了Kotlin設(shè)計(jì)哲學(xué)、生態(tài)及基礎(chǔ)語法,其中包括Kotlin與Scala、Java之間的關(guān)聯(lián)與對比,以及Kotlin的類型聲明的特殊性、val和var的使用、高階函數(shù)的使用、面向表達(dá)式編程的使用、字符串的定義與操作等內(nèi)容;
下水篇—Kotlin核心(第3~8章),深入介紹了面向?qū)ο、代?shù)數(shù)據(jù)類型、模式匹配、類型系統(tǒng)、Lambda、集合、多態(tài)、擴(kuò)展、元編程等Kotlin開發(fā)核心知識,這是本書的重點(diǎn),其中涉及很多開發(fā)者特別關(guān)心的問題,比如多繼承問題、模式匹配問題、用代數(shù)數(shù)據(jù)類型抽象業(yè)務(wù)問題、泛型問題、反射問題等。
潛入篇—Kotlin探索(第9~11章),探索Kotlin在設(shè)計(jì)模式、函數(shù)式編程、異步和并發(fā)等編程領(lǐng)域的應(yīng)用,其中包括對4大類設(shè)計(jì)模式、Typeclass實(shí)現(xiàn)、函數(shù)式通用結(jié)構(gòu)設(shè)計(jì)、類型替代異常處理、共享資源控制、CQRS架構(gòu)等重點(diǎn)內(nèi)容的深入剖析;
遨游篇—Kotlin實(shí)戰(zhàn)(第12~13章),著重演示了Kotlin在Android和Web平臺的實(shí)戰(zhàn)案例,其中涉及架構(gòu)方式、單向數(shù)據(jù)流模型、解耦視圖導(dǎo)航、響應(yīng)式編程、Spring 5響應(yīng)式框架和編程等內(nèi)容。
前言
熱身篇 Kotlin基礎(chǔ)
第1章 認(rèn)識Kotlin2
1.1 Java的發(fā)展2
1.1.1 Java 8的探索3
1.1.2 Java未來的樣子3
1.2 Scala的百寶箱3
1.2.1 學(xué)術(shù)和工業(yè)的平衡4
1.2.2 復(fù)合但不復(fù)雜4
1.2.3 簡單卻不容易5
1.3 Kotlin—改良的Java5
1.3.1 Kotlin的實(shí)用主義6
1.3.2 更好的Java6
1.3.3 強(qiáng)大的生態(tài)8
1.4 本章小結(jié)8
第2章 基礎(chǔ)語法10
2.1 不一樣的類型聲明10
2.1.1 增強(qiáng)的類型推導(dǎo)11
2.1.2 聲明函數(shù)返回值類型11
2.2 val和var的使用規(guī)則13
2.2.1 val的含義:引用不可變13
2.2.2 優(yōu)先使用val來避免副作用14
2.2.3 var的適用場景15
2.3 高階函數(shù)和Lambda16
2.3.1 抽象和高階函數(shù)17
2.3.2 實(shí)例:函數(shù)作為參數(shù)的需求17
2.3.3 函數(shù)的類型19
2.3.4 方法和成員引用21
2.3.5 匿名函數(shù)22
2.3.6 Lambda是語法糖22
2.3.7 函數(shù)、Lambda和閉包25
2.3.8 “柯里化”風(fēng)格、擴(kuò)展函數(shù)26
2.4 面向表達(dá)式編程29
2.4.1 表達(dá)式比語句更安全30
2.4.2 Unit類型:讓函數(shù)調(diào)用皆為表達(dá)式32
2.4.3 復(fù)合表達(dá)式:更好的表達(dá)力33
2.4.4 枚舉類和when表達(dá)式34
2.4.5 for循環(huán)和范圍表達(dá)式37
2.4.6 中綴表達(dá)式39
2.5 字符串的定義和操作41
2.5.1 定義原生字符串41
2.5.2 字符串模板42
2.5.3 字符串判等43
2.6 本章小結(jié)43
下水篇 Kotlin核心
第3章 面向?qū)ο?6
3.1 類和構(gòu)造方法46
3.1.1 Kotlin中的類及接口46
3.1.2 更簡潔地構(gòu)造類的對象49
3.1.3 主從構(gòu)造方法55
3.2 不同的訪問控制原則56
3.2.1 限制修飾符57
3.2.2 可見性修飾符61
3.3 解決多繼承問題64
3.3.1 騾子的多繼承困惑64
3.3.2 接口實(shí)現(xiàn)多繼承65
3.3.3 內(nèi)部類解決多繼承問題的方案67
3.3.4 使用委托代替多繼承69
3.4 真正的數(shù)據(jù)類71
3.4.1 煩瑣的JavaBean 71
3.4.2 用data class創(chuàng)建數(shù)據(jù)類 73
3.4.3 copy、componentN與解構(gòu)75
3.4.4 數(shù)據(jù)類的約定與使用78
3.5 從static到object79
3.5.1 什么是伴生對象79
3.5.2 天生的單例:object81
3.5.3 object表達(dá)式82
3.6 本章小結(jié)84
第4章 代數(shù)數(shù)據(jù)類型和模式匹配85
4.1 代數(shù)數(shù)據(jù)類型85
4.1.1 從代數(shù)到類型86
4.1.2 計(jì)數(shù)87
4.1.3 積類型87
4.1.4 和類型與密封類88
4.1.5 構(gòu)造代數(shù)數(shù)據(jù)類型89
4.2 模式匹配90
4.2.1 何為模式91
4.2.2 常見的模式92
4.2.3 處理嵌套表達(dá)式93
4.2.4 通過Scala找點(diǎn)靈感95
4.2.5 用when力挽狂瀾97
4.3 增強(qiáng) Kotlin 的模式匹配99
4.3.1 類型測試/類型轉(zhuǎn)換99
4.3.2 面向?qū)ο蟮姆纸?00
4.3.3 訪問者設(shè)計(jì)模式102
4.3.4 總結(jié)104
4.4 用代數(shù)數(shù)據(jù)類型來抽象業(yè)務(wù)105
4.4.1 從一個實(shí)際需求入手105
4.4.2 糟糕的設(shè)計(jì)105
4.4.3 利用ADT106
4.4.4 更高層次的抽象108
4.5 本章總結(jié)110
第5章 類型系統(tǒng)112
5.1 null引用:10億美元的錯誤112
5.1.1 null做了哪些惡112
5.1.2 如何解決NPE問題114
5.2 可空類型115
5.2.1 Java 8中的Optional115
5.2.2 Kotlin的可空類型118
5.2.3 類型檢查121
5.2.4 類型智能轉(zhuǎn)換122
5.3 比Java更面向?qū)ο蟮脑O(shè)計(jì)124
5.3.1 Any:非空類型的根類型124
5.3.2 Any?:所有類型的根類型127
5.3.3 Nothing與Nothing?128
5.3.4 自動裝箱與拆箱128
5.3.5 “新”的數(shù)組類型129
5.4 泛型:讓類型更加安全130
5.4.1 泛型:類型安全的利刃130
5.4.2 如何在Kotlin中使用泛型131
5.4.3 類型約束:設(shè)定類型上界133
5.5 泛型的背后:類型擦除135
5.5.1 Java為什么無法聲明一個泛型數(shù)組135
5.5.2 向后兼容的罪136
5.5.3 類型擦除的矛盾138
5.5.4 使用內(nèi)聯(lián)函數(shù)獲取泛型139
5.6 打破泛型不變140
5.6.1 為什么List不能賦值給List