Kotlin編程權威指南

[美] 喬希·斯基恩(Josh Skeen),[美] 戴維·格林哈爾希(David Greenhalgh)

立即出貨

買這商品的人也買了...

商品描述

本書由知名技術培訓機構Big Nerd Ranch打造,秉承其一貫的簡潔、實用的寫作風格。Kotlin已成為Android官方支持的開發語言,但它具有平臺獨立性,亦可用於開發各種類型的原生應用。本書將帶領你通過搭建書中的示例項目來循序漸進地掌握Kotlin 的用法。首先使用IntelliJ IDEA搭建沙盒項目,幫助你熟悉開發環境。接下來介紹Kotlin編程知識,從較為基礎的變量、常量、類型等講起,逐漸深入到繼承、對象和抽象類。最後是函數式編程、Kotlin與Java互操作、構建Android應用等較復雜的內容。多章配有習題,幫你溫故知新,鞏固所學知識。

作者簡介

[美]喬希·斯基恩(Josh Skeen),[美]戴維·格林哈爾希(David Greenhalgh)譯者:王明發

喬希·斯基恩(Josh Skeen)
軟件開發工程師, Big Nerd Ranch培訓師,在世界各地講授Java、Android應用開發以及Kotlin的課程。畢業於庫伯高等科學藝術聯盟學院。

戴維·格林哈爾希(David Greenhalgh)
Android開發人員,Big Nerd Ranch培訓師。畢業於佐治亞理工學院。

目錄大綱

第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