本書(shū)不是一本簡(jiǎn)單介紹Kotlin語(yǔ)法應(yīng)用的圖書(shū),而是一部專(zhuān)注于幫助讀者深入理解Kotlin的設(shè)計(jì)理念,指導(dǎo)讀者實(shí)現(xiàn)Kotlin高層次開(kāi)發(fā)的實(shí)戰(zhàn)型著作。書(shū)中深入介紹了Kotlin的核心語(yǔ)言特性、設(shè)計(jì)模式、函數(shù)式編程、異步開(kāi)發(fā)等內(nèi)容,并以Android和Web兩個(gè)平臺(tái)為背景,演示了Kotlin的實(shí)戰(zhàn)應(yīng)用。
全書(shū)共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的類(lèi)型聲明的特殊性、val和var的使用、高階函數(shù)的使用、面向表達(dá)式編程的使用、字符串的定義與操作等內(nèi)容;
下水篇—Kotlin核心(第3~8章),深入介紹了面向?qū)ο、代?shù)數(shù)據(jù)類(lèi)型、模式匹配、類(lèi)型系統(tǒng)、Lambda、集合、多態(tài)、擴(kuò)展、元編程等Kotlin開(kāi)發(fā)核心知識(shí),這是本書(shū)的重點(diǎn),其中涉及很多開(kāi)發(fā)者特別關(guān)心的問(wèn)題,比如多繼承問(wèn)題、模式匹配問(wèn)題、用代數(shù)數(shù)據(jù)類(lèi)型抽象業(yè)務(wù)問(wèn)題、泛型問(wèn)題、反射問(wèn)題等。
潛入篇—Kotlin探索(第9~11章),探索Kotlin在設(shè)計(jì)模式、函數(shù)式編程、異步和并發(fā)等編程領(lǐng)域的應(yīng)用,其中包括對(duì)4大類(lèi)設(shè)計(jì)模式、Typeclass實(shí)現(xiàn)、函數(shù)式通用結(jié)構(gòu)設(shè)計(jì)、類(lèi)型替代異常處理、共享資源控制、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 不一樣的類(lèi)型聲明10
2.1.1 增強(qiáng)的類(lèi)型推導(dǎo)11
2.1.2 聲明函數(shù)返回值類(lèi)型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ù)的類(lèi)型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類(lèi)型:讓函數(shù)調(diào)用皆為表達(dá)式32
2.4.3 復(fù)合表達(dá)式:更好的表達(dá)力33
2.4.4 枚舉類(lèi)和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 類(lèi)和構(gòu)造方法46
3.1.1 Kotlin中的類(lèi)及接口46
3.1.2 更簡(jiǎn)潔地構(gòu)造類(lèi)的對(duì)象49
3.1.3 主從構(gòu)造方法55
3.2 不同的訪問(wèn)控制原則56
3.2.1 限制修飾符57
3.2.2 可見(jiàn)性修飾符61
3.3 解決多繼承問(wèn)題64
3.3.1 騾子的多繼承困惑64
3.3.2 接口實(shí)現(xiàn)多繼承65
3.3.3 內(nèi)部類(lèi)解決多繼承問(wèn)題的方案67
3.3.4 使用委托代替多繼承69
3.4 真正的數(shù)據(jù)類(lèi)71
3.4.1 煩瑣的JavaBean 71
3.4.2 用data class創(chuàng)建數(shù)據(jù)類(lèi) 73
3.4.3 copy、componentN與解構(gòu)75
3.4.4 數(shù)據(jù)類(lèi)的約定與使用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ù)類(lèi)型和模式匹配85
4.1 代數(shù)數(shù)據(jù)類(lèi)型85
4.1.1 從代數(shù)到類(lèi)型86
4.1.2 計(jì)數(shù)87
4.1.3 積類(lèi)型87
4.1.4 和類(lèi)型與密封類(lèi)88
4.1.5 構(gòu)造代數(shù)數(shù)據(jù)類(lèi)型89
4.2 模式匹配90
4.2.1 何為模式91
4.2.2 常見(jiàn)的模式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 類(lèi)型測(cè)試/類(lèi)型轉(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)型來(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章 類(lèi)型系統(tǒng)112
5.1 null引用:10億美元的錯(cuò)誤112
5.1.1 null做了哪些惡112
5.1.2 如何解決NPE問(wèn)題114
5.2 可空類(lèi)型115
5.2.1 Java 8中的Optional115
5.2.2 Kotlin的可空類(lèi)型118
5.2.3 類(lèi)型檢查121
5.2.4 類(lèi)型智能轉(zhuǎn)換122
5.3 比Java更面向?qū)ο蟮脑O(shè)計(jì)124
5.3.1 Any:非空類(lèi)型的根類(lèi)型124
5.3.2 Any?:所有類(lèi)型的根類(lèi)型127
5.3.3 Nothing與Nothing?128
5.3.4 自動(dòng)裝箱與拆箱128
5.3.5 “新”的數(shù)組類(lèi)型129
5.4 泛型:讓類(lèi)型更加安全130
5.4.1 泛型:類(lèi)型安全的利刃130
5.4.2 如何在Kotlin中使用泛型131
5.4.3 類(lèi)型約束:設(shè)定類(lèi)型上界133
5.5 泛型的背后:類(lèi)型擦除135
5.5.1 Java為什么無(wú)法聲明一個(gè)泛型數(shù)組135
5.5.2 向后兼容的罪136
5.5.3 類(lèi)型擦除的矛盾138
5.5.4 使用內(nèi)聯(lián)函數(shù)獲取泛型139
5.6 打破泛型不變140
5.6.1 為什么List不能賦值給List