本書不是一本簡單介紹Kotlin語法應用的圖書,而是一部專注于幫助讀者深入理解Kotlin的設計理念,指導讀者實現(xiàn)Kotlin高層次開發(fā)的實戰(zhàn)型著作。書中深入介紹了Kotlin的核心語言特性、設計模式、函數(shù)式編程、異步開發(fā)等內容,并以Android和Web兩個平臺為背景,演示了Kotlin的實戰(zhàn)應用。
全書共13章,分為4個部分:
熱身篇—Kotlin基礎(第1~2章),簡單介紹了Kotlin設計哲學、生態(tài)及基礎語法,其中包括Kotlin與Scala、Java之間的關聯(lián)與對比,以及Kotlin的類型聲明的特殊性、val和var的使用、高階函數(shù)的使用、面向表達式編程的使用、字符串的定義與操作等內容;
下水篇—Kotlin核心(第3~8章),深入介紹了面向對象、代數(shù)數(shù)據(jù)類型、模式匹配、類型系統(tǒng)、Lambda、集合、多態(tài)、擴展、元編程等Kotlin開發(fā)核心知識,這是本書的重點,其中涉及很多開發(fā)者特別關心的問題,比如多繼承問題、模式匹配問題、用代數(shù)數(shù)據(jù)類型抽象業(yè)務問題、泛型問題、反射問題等。
潛入篇—Kotlin探索(第9~11章),探索Kotlin在設計模式、函數(shù)式編程、異步和并發(fā)等編程領域的應用,其中包括對4大類設計模式、Typeclass實現(xiàn)、函數(shù)式通用結構設計、類型替代異常處理、共享資源控制、CQRS架構等重點內容的深入剖析;
遨游篇—Kotlin實戰(zhàn)(第12~13章),著重演示了Kotlin在Android和Web平臺的實戰(zhàn)案例,其中涉及架構方式、單向數(shù)據(jù)流模型、解耦視圖導航、響應式編程、Spring 5響應式框架和編程等內容。
前言
熱身篇 Kotlin基礎
第1章 認識Kotlin2
1.1 Java的發(fā)展2
1.1.1 Java 8的探索3
1.1.2 Java未來的樣子3
1.2 Scala的百寶箱3
1.2.1 學術和工業(yè)的平衡4
1.2.2 復合但不復雜4
1.2.3 簡單卻不容易5
1.3 Kotlin—改良的Java5
1.3.1 Kotlin的實用主義6
1.3.2 更好的Java6
1.3.3 強大的生態(tài)8
1.4 本章小結8
第2章 基礎語法10
2.1 不一樣的類型聲明10
2.1.1 增強的類型推導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ù)的需求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 “柯里化”風格、擴展函數(shù)26
2.4 面向表達式編程29
2.4.1 表達式比語句更安全30
2.4.2 Unit類型:讓函數(shù)調用皆為表達式32
2.4.3 復合表達式:更好的表達力33
2.4.4 枚舉類和when表達式34
2.4.5 for循環(huán)和范圍表達式37
2.4.6 中綴表達式39
2.5 字符串的定義和操作41
2.5.1 定義原生字符串41
2.5.2 字符串模板42
2.5.3 字符串判等43
2.6 本章小結43
下水篇 Kotlin核心
第3章 面向對象46
3.1 類和構造方法46
3.1.1 Kotlin中的類及接口46
3.1.2 更簡潔地構造類的對象49
3.1.3 主從構造方法55
3.2 不同的訪問控制原則56
3.2.1 限制修飾符57
3.2.2 可見性修飾符61
3.3 解決多繼承問題64
3.3.1 騾子的多繼承困惑64
3.3.2 接口實現(xiàn)多繼承65
3.3.3 內部類解決多繼承問題的方案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與解構75
3.4.4 數(shù)據(jù)類的約定與使用78
3.5 從static到object79
3.5.1 什么是伴生對象79
3.5.2 天生的單例:object81
3.5.3 object表達式82
3.6 本章小結84
第4章 代數(shù)數(shù)據(jù)類型和模式匹配85
4.1 代數(shù)數(shù)據(jù)類型85
4.1.1 從代數(shù)到類型86
4.1.2 計數(shù)87
4.1.3 積類型87
4.1.4 和類型與密封類88
4.1.5 構造代數(shù)數(shù)據(jù)類型89
4.2 模式匹配90
4.2.1 何為模式91
4.2.2 常見的模式92
4.2.3 處理嵌套表達式93
4.2.4 通過Scala找點靈感95
4.2.5 用when力挽狂瀾97
4.3 增強 Kotlin 的模式匹配99
4.3.1 類型測試/類型轉換99
4.3.2 面向對象的分解100
4.3.3 訪問者設計模式102
4.3.4 總結104
4.4 用代數(shù)數(shù)據(jù)類型來抽象業(yè)務105
4.4.1 從一個實際需求入手105
4.4.2 糟糕的設計105
4.4.3 利用ADT106
4.4.4 更高層次的抽象108
4.5 本章總結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 類型智能轉換122
5.3 比Java更面向對象的設計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 類型約束:設定類型上界133
5.5 泛型的背后:類型擦除135
5.5.1 Java為什么無法聲明一個泛型數(shù)組135
5.5.2 向后兼容的罪136
5.5.3 類型擦除的矛盾138
5.5.4 使用內聯(lián)函數(shù)獲取泛型139
5.6 打破泛型不變140
5.6.1 為什么List不能賦值給List