Kotlin 編程權威指南
內容描述
本書由知名技術培訓機構Big Nerd Ranch打造,秉承其一貫的簡潔、實用的寫作風格。Kotlin已成為Android官方支持的開發語言,但它具有平臺獨立性,亦可用於開發各種類型的原生應用。本書將帶領你通過搭建書中的示例項目來循序漸進地掌握Kotlin 的用法。首先使用IntelliJ IDEA搭建沙盒項目,幫助你熟悉開發環境。接下來介紹Kotlin編程知識,從較為基礎的變量、常量、類型等講起,逐漸深入到繼承、對象和抽象類。最後是函數式編程、Kotlin與Java互操作、構建Android應用等較復雜的內容。多章配有習題,幫你溫故知新,鞏固所學知識。
目錄大綱
第1章Kotlin應用開發初體驗1
1.1安裝IntelliJ IDEA 1
1.2第一個Kotlin項目2
1.2.1創建首個Kotlin文件5
1.2.2運行Kotlin文件7
1.3 Kotlin REPL 8
1.4深入學習:為什麼要用IntelliJ 10
1.5深入學習:面向JVM 10
1.6挑戰練習:使用REPL研究Kotlin中的算數運算符11
第2章變量、常量和類型12
2.1數據類型12
2.2聲明變量12
2.3 Kotlin的內置數據類型14
2.4只讀變量15
2.5類型推斷17
2.6編譯時常量19
2.7查看Kotlin字節碼19
2.8深入學習:Kotlin中的Java基本數據類型21
2.9挑戰練習:定義hasSteed變量22
2.10挑戰練習:獨角獸之角22
2.11挑戰練習:魔鏡23
第3章條件語句24
3.1 if/else語句24
3.1.1添加更多條件27
3.1.2 if/else嵌套語句28
3.1.3更優雅的條件語句29
3.2 range 33
3.3 when表達式34
3.4 string模板36
3.5挑戰練習:range研究37
3.6挑戰練習:優化玩家光環展示38
3.7挑戰練習:可配置的玩家狀況報告格式38
第4章函數40
4.1使用函數重構代碼40
4.2函數結構剖析42
4.2.1函數頭42
4.2.2函數體44
4.2.3函數作用域45
4.3調用函數46
4.4以函數重構代碼46
4.5自定義函數48
4.6默認值參49
4.7單表達式函數50
4.8 Unit函數51
4.9具名函數參數52
4.10深入學習:Nothing類型53
4.11深入學習:Java中的文件級函數54
4.12深入學習:函數重載55
4.13深入學習:反引號中的函數名56
4.14挑戰練習:單表達式函數57
4.15挑戰練習:Fireball醉酒程度57
4.16挑戰練習:醉酒狀態報告57
第5章匿名函數與函數類型58
5.1匿名函數58
5.1.1函數類型59
5.1.2隱式返回60
5.1.3函數參數61
5.1.4 it關鍵字61
5.1.5多個參數62
5.2類型推斷63
5.3定義參數是函數的函數63
5.4函數內聯65
5.5函數引用66
5.6函數類型作為返回類型68
5.7深入學習:Kotlin中的lambda就是閉包69
5.8深入學習:lambda與匿名內部類69
第6章null安全與異常71
6.1可空性71
6.2 Kotlin的null類型72
6.3編譯時間與運行時間73
6.4 null安全74
6.4.1選項一:安全調用操作符75
6.4.2選項二:使用!!.操作符76
6.4.3選項三:使用if判斷null值情況77
6.5異常79
6.5.1拋出異常80
6.5.2自定義異常81
6.5.3處理異常82
6.6先決條件函數83
6.7 null:真的一無是處嗎85
6.8深入學習:已檢查異常與未檢查異常86
6.9深入學習:可空性該如何保證86
第7章字符串88
7.1字符串截取88
7.1.1 substring 88
7.1.2 split 90
7.2字符串操作92
7.3字符串比較93
7.4深入學習:Unicode 95
7.5深入學習:遍歷字符95
7.6挑戰練習:改進toDragonSpeak函數96
第8章數97
8.1數字類型97
8.2整數98
8.3小數數字99
8.4字符串轉數值類型100
8.5 Int類型轉Double類型101
8.6 Double類型格式化102
8.7 Double類型轉換為Int類型103
8.8深入學習:位運算104
8.9挑戰練習:還剩多少酒105
8.10挑戰練習:解決負數餘額問題105
8.11挑戰練習:龍幣105
第9章標準庫函數106
9.1 apply 106
9.2 let 107
9.3 run 108
9.4 with 109
9.5 also 109
9.6 takeIf 110
9.7使用標準庫函數110
第10章List與Set 112
10.1 List 112
10.1.1獲取列表元素113
10.1.2更改列表內容116
10.2遍歷119
10.3將文件數據讀取到列表122
10.4解構124
10.5 Set 124
10.5.1創建一個Set集合124
10.5.2向Set集合中添加元素125
10.6 while循環128
10.7 break表達式129
10.8集合轉換129
10.9深入學習:數組類型130
10.10深入學習:只讀與不可變131
10.11挑戰練習:美化酒水單132
10.12挑戰練習:進一步美化酒水單132
第11章Map 133
11.1創建一個Map 133
11.2讀取Map集合的值135
11.3向Map集合添加項136
11.4修改Map集合值137
11.5挑戰練習:守衛小客棧140
第12章定義類141
12.1定義一個類141
12.2構造實例141
12.3類函數142
12.4可見性與封裝143
12.5類屬性144
12.5.1屬性getter與setter 146
12.5.2屬性可見性148
12.5.3計算屬性149
12.6重構NyetHack 149
12.7使用包156
12.8深入學習:細看var與val屬性157
12.9深入學習:防範競態條件160
12.10深入學習:私有包161
第13章初始化162
13.1構造函數162
13.1.1主構造函數163
13.1.2在主構造函數里定義屬性164
13.1.3次構造函數164
13.1.4默認參數166
13.1.5命名參數167
13.2初始化塊167
13.3屬性初始化168
13.4初始化順序170
13.5延遲初始化172
13.5.1延遲初始化172
13.5 .2惰性初始化173
13.6深入學習:初始化陷阱174
13.7挑戰練習:聖劍之謎176
第14章繼承178
14.1定義Room類178
14.2創建子類179
14.3類型檢測184
14.4 Kotlin類層次186
14.4.1類型轉換187
14.4.2智能類型轉換188
14.5深入學習:Any 189
第15章對象190
15.1 object關鍵字190
15.1.1對象聲明190
15.1.2對象表達式195
15.1.3伴生對象195
15.2嵌套類196
15.3數據類199
15.3.1 toString 200
15.3.2 equals 200
15.3.3 copy 200
15.3.4解構聲明201
15.4枚舉類202
15.5運算符重載203
15.6探索NyetHack遊戲世界205
15.7深入學習:定義結構比較208
15.8深入學習:代數數據類型210
15.9挑戰練習:“quit”命令211
15.10挑戰練習:魔力地圖212
15.11挑戰練習:搖鈴212
第16章接口與抽像類213
16.1定義接口213
16.2實現接口214
16.3默認實現216
16.4抽像類217
16.5在NyetHack遊戲裡打怪219
第17章泛型223
17.1定義泛型類223
17.2泛型函數224
17.3多泛型參數225
17.4泛型約束227
17.5 vararg關鍵字與get函數228
17.6 in與out 230
17.7深入學習:reified關鍵字234
第18章擴展236
18.1定義擴展函數236
18.2泛型擴展函數237
18.3擴展屬性239
18.4可空類擴展240
18.5擴展實現揭秘241
18.6用擴展封裝代碼241
18.7定義擴展文件243
18.8重命名擴展245
18.9 Kotlin標準庫中的擴展245
18.10深入學習:帶接收者的函數字面量246
18.11挑戰練習:toDragonSpeak擴展247
18.12挑戰練習:frame擴展247
第19章函數式編程基礎248
19.1函數類別248
19.1.1變換248
19.1.2過濾250
19.1.3合併251
19.2為什麼要學習函數式編程252
19.3序列253
19.4深入學習:評估代碼性能254
19.5深入學習:Arrow.kt 255
19.6挑戰練習:Map值反轉255
19.7挑戰練習:應用函數式編程256
19.8挑戰練習:滑窗算法257
第20章Kotlin與Java互操作258
20.1與Java類互操作258
20.2互操作性與可空性259
20.3類型映射262
20.4 getter和setter方法與互操作性263
20.5類之外265
20.6異常與互操作性272
20.7 Java中的函數類型275
第21章用Kotlin開發首個Android應用277
21.1 Android Studio 277
21.1.1 Gradle配置281
21.1.2項目組織283
21.2定義UI 283
21.3用模擬器運行應用286
21.4生成角色287
21.5 Activity類288
21.6實例化視圖289
21.7 Kotlin Android擴展291
21.8設置單擊事件監聽器293
21.9保存實例狀態294
21.10使用擴展重構代碼296
21.11深入學習:Android KTX與Anko庫298
第22章Kotlin協程簡介300
22.1解析角色數據300
22.2獲取動態數據302
22.3 Android主線程305
22.4啟用協程305
22.5使用async指定協程305
22.6 launch與async/await 307
22.7掛起函數307
22.8挑戰練習:動態數據308
22.9挑戰練習:最小力量值308
第23章編後語309
23.1前方的路309
23.2插個廣告309
23.3致謝309
附錄A補充挑戰練習310
術語表316
作者介紹
[美]喬希·斯基恩(Josh Skeen),[美]戴維·格林哈爾希(David Greenhalgh)譯者:王明發
喬希·斯基恩(Josh Skeen)
軟件開發工程師, Big Nerd Ranch培訓師,在世界各地講授Java、Android應用開發以及Kotlin的課程。畢業於庫伯高等科學藝術聯盟學院。
戴維·格林哈爾希(David Greenhalgh)
Android開發人員,Big Nerd Ranch培訓師。畢業於佐治亞理工學院。