●章 Kotlin入門 1 1.1 Kotlin簡介 1 1.1.1 Kotlin的前景 1 1.1.2 Kotlin的特性 2 1.2 Kotlin開發環境搭建 3 1.2.1 Kotlin常用開發工具 3 1.2.2 IntelliJ IDEA的安裝 3 1.3 開發個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 循環結構語句 32 2.6.1 while循環語句 32 2.6.2 do...while循環語句 33 2.6.3 for循環語句 34 2.6.4 循環嵌套 35 2.6.5 forEach循環語句 36 2.6.6 跳轉語句(continue、break) 37 2.7 區間 39 2.7.1 正向區間 39 2.7.2 逆向區間 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 對像的創建 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 函數作為參數優化 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 協變與逆變 139 7.5.1 協變 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章 協程 168 9.1 協程簡介 168 9.1.1 協程概述 168 9.1.2 協程的定義 169 9.1.3 線程與協程實現對比 169 9.2 協程的基本操作 171 9.2.1 協程掛起 171 9.2.2 掛起函數 172 9.2.3 主協程 172 9.2.4 協程中的Job任務 173 9.2.5 普通線程和守護線程 175 9.2.6 線程與協程效率對比 176 9.3 協程取消 177 9.3.1 協程取消 177 9.3.2 協程取消失效 180 9.3.3 定時取消 181 9.3.4 掛起函數的執行順序 182 9.3.5 通過async啟動協程 183 9.3.6 協程上下文和調度器 184 9.3.7 父子協程 185 9.4 管道 186 9.4.1 管道簡介 186 9.4.2 管道的關閉 187 9.4.3 生產者與消費者 188 9.4.4 管道緩存區 189 9.5 本章小結 190 0章 坦克大戰 191 10.1 項目介紹 191 10.1.1 項目概述 191 10.1.2 開發環境 191 10.1.3 效果展示 192 10.2 項目搭建 194 10.2.1 項目創建 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 敵方坦克自動發射子彈 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 1章 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 2章 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中的靜態成員 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中的靜態字段和 方法 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 3章 時鐘 269 13.1 時鐘項目簡介 269 13.1.1 項目概述 269 13.1.2 開發環境 269 13.2 創建時鐘項目 270 13.2.1 創建項目 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 繪制時鐘的圓環 277 13.4.2 繪制60個圓點 278 13.4.3 繪制時鐘的數字 279 13.4.4 繪制時鐘的指針 280 13.4.5 設置當前時間 283 13.5 本章小結 284
內容簡介
本書從初學者的角度詳細講解了Kotlin開發中常用的多種技術。全書共13章,內容包括Kotlin入門、Kotlin編程基礎、函數、面向對像、集合、lambda編程、泛型、Gradle、協程、“坦克大戰”遊戲開發、DSL、Kotlin與Java互操作、時鐘。 本書通過典型的案例、通俗易懂的語言闡述面向對像中的抽像概念,在集合、Lambda編程、泛型、Gradle、協程等章節中,通過剖析案例、分析代碼結構、解決常見問題等方式,幫助初學者培養良好的編程習慣。0章運用前幾章的基礎知識實現了一個坦克大戰的遊戲案例開發。1~13章分別介紹了DSL、Kotlin與Java進行互操作以及通過Kotlin語言實現一個JavaScript語言的時鐘項目,幫助初學者掌握Kotlin語言與Java語言、JavaScript語言的互操作。 本書既可作為高等院校本、專科計算機相關專業的教材,也可作為社會培訓教材,是......