本書從初學者的角度詳細講解了Kotlin開發(fā)中常用的多種技術。全書共13章,內容包括Kotlin入門、Kotlin編程基礎、函數、面向對象、集合、lambda編程、泛型、Gradle、協(xié)程、“坦克大戰(zhàn)”游戲開發(fā)、DSL、Kotlin與Java互操作、時鐘。
本書通過典型的案例、通俗易懂的語言闡述面向對象中的抽象概念,在集合、Lambda編程、泛型、Gradle、協(xié)程等章節(jié)中,通過剖析案例、分析代碼結構、解決常見問題等方式,幫助初學者培養(yǎng)良好的編程習慣。第10章運用前幾章的基礎知識實現了一個坦克大戰(zhàn)的游戲案例開發(fā)。第11~13章分別介紹了DSL、Kotlin與Java進行互操作以及通過Kotlin語言實現一個JavaScript語言的時鐘項目,幫助初學者掌握Kotlin語言與Java語言、JavaScript語言的互操作。
本書既可作為高等院校本、?朴嬎銠C相關專業(yè)的教材,也可作為社會培訓教材,是一本適合廣大編程愛好者參考和學習的書籍。為了幫助編程者更好地學習本書中的內容,本書還提供了配套的源代碼與視頻等資源,方便讀者學習。
1.本書從基礎入門開始,帶領讀者逐步學習Kotlin的相關技術,最后以游戲開發(fā)案例貫穿全書;
2.全書配套教學視頻,幫助讀者全面掌握相關內容。
黑馬程序員,傳智播客旗下高端IT教育品牌,成立于2006年,它是由中國Java培訓領軍人張孝祥老師發(fā)起,聯合全球*大的中文IT社區(qū)CSDN、中關村軟件園共同創(chuàng)辦的一家專業(yè)教育機構。辦學至今,我們一直堅守著“為千萬人少走彎路而著書,為中華軟件之崛起而講課”的辦學理念,堅持培養(yǎng)優(yōu)秀軟件應用工程師的宏偉目標。
第1章 Kotlin入門 1
1.1 Kotlin簡介 1
1.1.1 Kotlin的前景 1
1.1.2 Kotlin的特性 2
1.2 Kotlin開發(fā)環(huán)境搭建 3
1.2.1 Kotlin常用開發(fā)工具 3
1.2.2 IntelliJ IDEA的安裝 3
1.3 開發(fā)第一個Kotlin程序 6
1.4 本章小結 10
第2章 Kotlin編程基礎 11
2.1 Kotlin的基本語法 11
2.1.1 Kotlin代碼的基本格式 11
2.1.2 Kotlin中的注釋 12
2.2 Kotlin中的變量 13
2.2.1 變量的定義 13
2.2.2 變量的數據類型 14
2.3 運算符 16
2.3.1 算術運算符 16
2.3.2 賦值運算符 17
2.3.3 比較運算符 18
2.3.4 邏輯運算符 18
2.4 字符串 19
2.4.1 字符串的定義 19
2.4.2 字符串的常見操作 20
2.5 選擇結構語句 25
2.5.1 if條件語句 26
2.5.2 when條件語句 30
2.6 循環(huán)結構語句 32
2.6.1 while循環(huán)語句 32
2.6.2 do...while循環(huán)語句 33
2.6.3 for循環(huán)語句 34
2.6.4 循環(huán)嵌套 35
2.6.5 forEach循環(huán)語句 36
2.6.6 跳轉語句(continue、break) 37
2.7 區(qū)間 39
2.7.1 正向區(qū)間 39
2.7.2 逆向區(qū)間 40
2.7.3 步長 40
2.8 數組 41
2.8.1 數組的定義 41
2.8.2 數組的常見操作 43
2.9 變量的類型轉換 47
2.9.1 類型檢查 47
2.9.2 智能類型轉換 47
2.9.3 強制類型轉換 48
2.10 空值處理 49
2.10.1 可空類型變量( ) 49
2.10.2 安全調用符( .) 50
2.10.3 Elvis操作符( :) 50
2.10.4 非空斷言(!!.) 51
2.11 本章小結 52
第3章 函數 53
3.1 函數的介紹 53
3.1.1 函數的定義 53
3.1.2 函數的類型 54
3.1.3 單表達式函數 55
3.1.4 函數的參數 56
3.2 函數的分類 59
3.2.1 頂層函數 59
3.2.2 成員函數 60
3.2.3 局部函數 61
3.2.4 遞歸函數 62
3.2.5 尾遞歸函數 62
3.2.6 函數重載 64
3.3 本章小結 65
第4章 面向對象 66
4.1 面向對象的概念 66
4.2 類與對象 67
4.2.1 類的定義 67
4.2.2 對象的創(chuàng)建 67
4.2.3 類的封裝 68
4.3 構造函數 69
4.3.1 主構函數 70
4.3.2 this關鍵字 70
4.3.3 次構函數 71
4.4 類的繼承 72
4.4.1 類的繼承 72
4.4.2 方法重寫 73
4.4.3 super關鍵字 74
4.5 抽象類和接口 76
4.5.1 抽象類 76
4.5.2 接口 77
4.6 常見類 79
4.6.1 嵌套類 79
4.6.2 內部類 80
4.6.3 枚舉類 80
4.6.4 密封類 81
4.6.5 數據類 82
4.6.6 單例模式 82
4.6.7 伴生對象 83
4.7 委托 84
4.7.1 類委托 84
4.7.2 屬性委托 85
4.7.3 延遲加載 87
4.8 異!87
4.8.1 什么是異常 87
4.8.2 try...catch和finally 88
4.8.3 throw關鍵字 91
4.8.4 受檢異!92
4.8.5 自定義異!93
4.9 本章小結 95
第5章 集合 96
5.1 集合概述 96
5.2 List接口 98
5.2.1 List接口簡介 98
5.2.2 不可變List 98
5.2.3 可變MutableList 101
5.3 Set接口 104
5.3.1 Set接口簡介 104
5.3.2 不可變Set 104
5.3.3 可變MutableSet 106
5.4 Map接口 107
5.4.1 Map接口簡介 107
5.4.2 不可變Map 107
5.4.3 可變MutableMap 109
5.5 本章小結 110
第6章 Lambda編程 111
6.1 Lambda表達式入門 111
6.1.1 Lambda表達式簡介 111
6.1.2 Lambda表達式返回值 113
6.2 高階函數的使用 114
6.2.1 函數作為參數使用 115
6.2.2 函數作為參數優(yōu)化 115
6.2.3 函數作為返回值 118
6.3 標準庫中的高階函數 119
6.3.1 高階函數操作集合 119
6.3.2 標準庫中的高階函數 123
6.4 內聯函數 127
6.4.1 使用內聯函數 127
6.4.2 禁用內聯函數 128
6.5 本章小結 128
第7章 泛型 129
7.1 泛型的定義 129
7.2 泛型的分類 130
7.2.1 泛型類 130
7.2.2 泛型接口 131
7.2.3 泛型方法 132
7.3 泛型約束 133
7.3.1 泛型約束的必要性 133
7.3.2 泛型約束 134
7.4 子類和子類型 136
7.4.1 繼承與子類型 136
7.4.2 接口與子類型 137
7.4.3 可空類型的子類型 137
7.5 協(xié)變與逆變 139
7.5.1 協(xié)變 139
7.5.2 逆變 140
7.5.3 點變型 141
7.6 泛型擦除與實化類型 142
7.6.1 泛型擦除 142
7.6.2 泛型通配符 143
7.6.3 實化類型 144
7.7 本章小結 145
第8章 Gradle 146
8.1 Gradle簡介 146
8.2 Gradle程序 147
8.2.1 第一個Gradle程序 147
8.2.2 Java代碼與Kotlin代碼共存 152
8.3 Gradle的任務 153
8.3.1 Gradle中的project和task 153
8.3.2 Gradle任務的依賴 154
8.3.3 Gradle任務的生命周期 155
8.3.4 Gradle任務集 157
8.3.5 Gradle默認屬性和任務 158
8.3.6 Gradle增量式更新任務 160
8.4 Gradle的依賴 162
8.4.1 Gradle的依賴包管理 162
8.4.2 公共倉庫和依賴配置 162
8.5 Gradle擴展 164
8.5.1 Gradle插件自定義擴展 164
8.5.2 Gradle調用外部擴展 165
8.6 本章小結 167
第9章 協(xié)程 168
9.1 協(xié)程簡介 168
9.1.1 協(xié)程概述 168
9.1.2 協(xié)程的定義 169
9.1.3 線程與協(xié)程實現對比 169
9.2 協(xié)程的基本操作 171
9.2.1 協(xié)程掛起 171
9.2.2 掛起函數 172
9.2.3 主協(xié)程 172
9.2.4 協(xié)程中的Job任務 173
9.2.5 普通線程和守護線程 175
9.2.6 線程與協(xié)程效率對比 176
9.3 協(xié)程取消 177
9.3.1 協(xié)程取消 177
9.3.2 協(xié)程取消失效 180
9.3.3 定時取消 181
9.3.4 掛起函數的執(zhí)行順序 182
9.3.5 通過async啟動協(xié)程 183
9.3.6 協(xié)程上下文和調度器 184
9.3.7 父子協(xié)程 185
9.4 管道 186
9.4.1 管道簡介 186
9.4.2 管道的關閉 187
9.4.3 生產者與消費者 188
9.4.4 管道緩存區(qū) 189
9.5 本章小結 190
第10章 坦克大戰(zhàn) 191
10.1 項目介紹 191
10.1.1 項目概述 191
10.1.2 開發(fā)環(huán)境 191
10.1.3 效果展示 192
10.2 項目搭建 194
10.2.1 項目創(chuàng)建 194
10.2.2 添加游戲引擎 194
10.3 窗體設計 196
10.4 繪制游戲元素 198
10.4.1 繪制墻和草坪 198
10.4.2 繪制地圖 199
10.4.3 繪制我方坦克 201
10.5 我方坦克移動 204
10.5.1 坦克的移動 204
10.5.2 移動碰撞處理 205
10.6 子彈 209
10.6.1 繪制子彈 209
10.6.2 計算子彈的位置 210
10.6.3 子彈飛行 213
10.6.4 銷毀脫離窗體的子彈 214
10.6.5 子彈的攻與受 216
10.6.6 爆炸物的顯示 220
10.7 敵方坦克 223
10.7.1 敵方坦克繪制 223
10.7.2 敵方坦克的移動 224
10.7.3 敵方坦克自動發(fā)射子彈 227
10.7.4 雙方坦克的相互傷害 229
10.8 大本營 232
10.8.1 繪制大本營 232
10.8.2 實現大本營特性 234
10.9 游戲結束與打包 236
10.9.1 游戲的結束 236
10.9.2 Gradle打包游戲 240
10.10 本章小結 242
第11章 DSL 243
11.1 DSL簡介 243
11.1.1 DSL概述 243
11.1.2 DSL程序 244
11.2 DSL的使用 246
11.2.1 打印簡單的HTML標簽 246
11.2.2 打印復雜的HTML標簽 247
11.3 Anko插件 249
11.4 本章小結 250
第12章 Kotlin與Java互
操作 251
12.1 在Kotlin中調用Java 251
12.1.1 調用Java中的getter/setter方法 251
12.1.2 調用Java中的@NotNull注解 252
12.1.3 調用Java中的靜態(tài)成員 253
12.1.4 SAM轉換 254
12.2 在Java中調用Kotlin 255
12.2.1 調用Kotlin中的包級函數 255
12.2.2 調用Kotlin中的實例字段 256
12.2.3 調用Kotlin中的靜態(tài)字段和
方法 257
12.2.4 調用Kotlin中的集合類 258
12.2.5 顯式申明Kotlin中的異!259
12.2.6 關鍵字沖突的互操作 260
12.3 Kotlin與Java中的操作
對比 261
12.3.1 語法格式對比 261
12.3.2 異常檢查對比 263
12.3.3 可變參數對比 264
12.3.4 類的class對象對比 265
12.3.5 成員控制權限對比 266
12.3.6 默認參數函數對比 267
12.4 本章小結 268
第13章 時鐘 269
13.1 時鐘項目簡介 269
13.1.1 項目概述 269
13.1.2 開發(fā)環(huán)境 269
13.2 創(chuàng)建時鐘項目 270
13.2.1 創(chuàng)建項目 270
13.2.2 初始化畫布 271
13.3 繪制基本元素 273
13.3.1 繪制直線、三角形、矩形 273
13.3.2 繪制圓形 275
13.3.3 填充圖形 276
13.3.4 繪制文本 277
13.4 繪制時鐘 277
13.4.1 繪制時鐘的圓環(huán) 277
13.4.2 繪制60個圓點 278
13.4.3 繪制時鐘的數字 279
13.4.4 繪制時鐘的指針 280
13.4.5 設置當前時間 283
13.5 本章小結 284