本書不是一本簡(jiǎn)單介紹Kotlin語(yǔ)法應(yīng)用的圖書,而是一部專注于幫助讀者深入理解Kotlin的設(shè)計(jì)理念,指導(dǎo)讀者實(shí)現(xiàn)Kotlin高層次開發(fā)的實(shí)戰(zhàn)型著作。書中深入介紹了Kotlin的核心語(yǔ)言特性、設(shè)計(jì)模式、函數(shù)式編程、異步開發(fā)等內(nèi)容,并以Android和Web兩個(gè)平臺(tái)為背景,演示了Kotlin的實(shí)戰(zhàn)應(yīng)用。
全書共13章,分為4個(gè)部分:
熱身篇—Kotlin基礎(chǔ)(第1~2章),簡(jiǎn)單介紹了Kotlin設(shè)計(jì)哲學(xué)、生態(tài)及基礎(chǔ)語(yǔ)法,其中包括Kotlin與Scala、Java之間的關(guān)聯(lián)與對(duì)比,以及Kotlin的類型聲明的特殊性、val和var的使用、高階函數(shù)的使用、面向表達(dá)式編程的使用、字符串的定義與操作等內(nèi)容;
下水篇—Kotlin核心(第3~8章),深入介紹了面向?qū)ο、代?shù)數(shù)據(jù)類型、模式匹配、類型系統(tǒng)、Lambda、集合、多態(tài)、擴(kuò)展、元編程等Kotlin開發(fā)核心知識(shí),這是本書的重點(diǎn),其中涉及很多開發(fā)者特別關(guān)心的問(wèn)題,比如多繼承問(wèn)題、模式匹配問(wèn)題、用代數(shù)數(shù)據(jù)類型抽象業(yè)務(wù)問(wèn)題、泛型問(wèn)題、反射問(wèn)題等。
潛入篇—Kotlin探索(第9~11章),探索Kotlin在設(shè)計(jì)模式、函數(shù)式編程、異步和并發(fā)等編程領(lǐng)域的應(yīng)用,其中包括對(duì)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平臺(tái)的實(shí)戰(zhàn)案例,其中涉及架構(gòu)方式、單向數(shù)據(jù)流模型、解耦視圖導(dǎo)航、響應(yīng)式編程、Spring 5響應(yīng)式框架和編程等內(nèi)容。
前言
熱身篇 Kotlin基礎(chǔ)
第1章 認(rèn)識(shí)Kotlin2
1.1 Java的發(fā)展2
1.1.1 Java 8的探索3
1.1.2 Java未來(lái)的樣子3
1.2 Scala的百寶箱3
1.2.1 學(xué)術(shù)和工業(yè)的平衡4
1.2.2 復(fù)合但不復(fù)雜4
1.2.3 簡(jiǎn)單卻不容易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ǔ)語(yǔ)法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來(lái)避免副作用14
2.2.3 var的適用場(chǎng)景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是語(yǔ)法糖22
2.3.7 函數(shù)、Lambda和閉包25
2.3.8 “柯里化”風(fēng)格、擴(kuò)展函數(shù)26
2.4 面向表達(dá)式編程29
2.4.1 表達(dá)式比語(yǔ)句更安全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 更簡(jiǎn)潔地構(gòu)造類的對(duì)象49
3.1.3 主從構(gòu)造方法55
3.2 不同的訪問(wèn)控制原則56
3.2.1 限制修飾符57
3.2.2 可見性修飾符61
3.3 解決多繼承問(wèn)題64
3.3.1 騾子的多繼承困惑64
3.3.2 接口實(shí)現(xiàn)多繼承65
3.3.3 內(nèi)部類解決多繼承問(wèn)題的方案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 什么是伴生對(duì)象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 通過(guò)Scala找點(diǎn)靈感95
4.2.5 用when力挽狂瀾97
4.3 增強(qiáng) Kotlin 的模式匹配99
4.3.1 類型測(cè)試/類型轉(zhuǎn)換99
4.3.2 面向?qū)ο蟮姆纸?00
4.3.3 訪問(wèn)者設(shè)計(jì)模式102
4.3.4 總結(jié)104
4.4 用代數(shù)數(shù)據(jù)類型來(lái)抽象業(yè)務(wù)105
4.4.1 從一個(gè)實(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億美元的錯(cuò)誤112
5.1.1 null做了哪些惡112
5.1.2 如何解決NPE問(wèn)題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 自動(dòng)裝箱與拆箱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為什么無(wú)法聲明一個(gè)泛型數(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