Chapter 01 Kotlin 應用開發初體驗
1.1 安裝IntelliJ IDEA
1.2 第一個Kotlin 專案
1.3 Kotlin REPL
1.4 深入學習:為什麼要用IntelliJ
1.5 深入學習:JVM 導向
1.6 挑戰練習:使用REPL 研究Kotlin 中的算數運算子
Chapter 02 變數、常數和類型
2.1 資料類型
2.2 宣告變數
2.3 Kotlin 的內建資料類型
2.4 唯讀變數
2.5 類型推斷
2.6 編譯時期常數
2.7 查看Kotlin位元組碼
2.8 深入學習:Kotlin 中的Java 基礎資料類型
2.9 挑戰練習:定義hasSteed 變數
2.10 挑戰練習:獨角獸之角
2.11 挑戰練習:魔鏡
Chapter 03 條件運算式
3.1 if/else 語句
3.2 range
3.3 when 運算式
3.4 string 範本
3.5 挑戰練習:range 研究
3.6 挑戰練習:最佳化玩家光環展示
3.7 挑戰練習:可配置的玩家狀況報告格式
Chapter 04 函數
4.1 使用函數重構程式碼
4.2 函數結構剖析
4.3 呼叫函數
4.4 以函數重構程式碼
4.5 自訂函數
4.6 預設引數
4.7 單運算式函數
4.8 Unit 函數
4.9 具名函數引數
4.10 深入學習:Nothing類型
4.11 深入學習:Java 中的檔案層級函數
4.12 深入學習:函數重載
4.13 深入學習:反引號中的函數名稱
4.14 挑戰練習:單運算式函數
4.15 挑戰練習:Fireball 醉酒程度
4.16 挑戰練習:醉酒狀態報告
Chapter 05 匿名函數與函數類型
5.1 匿名函數
5.2 類型推斷
5.3 定義參數是函數的函數
5.4 函數內聯(Function Inlining)
5.5 函數參照
5.6 函數類型作為返回類型
5.7 深入學習:Kotlin 中的lambda 就是閉包
5.8 深入學習:lambda 與匿名內部類別
Chapter 06 null 安全與異常
6.1 可空性(Nullability)
6.2 Kotlin 的null 類型
6.3 編譯時期與執行時期
6.4 null 安全
6.5 異常
6.6 先決條件
6.7 null:真的一無是處嗎
6.8 深入學習:已檢查異常與未檢查異常
6.9 深入學習:該如何保證可空性
Chapter 07 字串
7.1 擷取字串
7.2 字串操作
7.3 字串比較
7.4 深入學習:Unicode
7.5 深入學習:巡訪字元
7.6 挑戰練習:改進toDragonSpeak函數
Chapter 08 數字
8.1 數字類型
8.2 整數
8.3 小數數字
8.4 字串轉成數值類型
8.5 Int 類型轉成Double類型
8.6 格式化Double 類型
8.7 Double 類型轉成Int類型
8.8 深入學習:位元運算
8.9 挑戰練習:還剩多少酒
8.10 挑戰練習:解決負數餘額問題
8.11 挑戰練習:龍幣
Chapter 09 標準函數
9.1 apply
9.2 let
9.3 run
9.4 with
9.5 also
9.6 takeIf
9.7 使用標準程式庫函數
Chapter 10 List 與Set
10.1 List
10.2 迭代
10.3 讀取檔案內容到清單
10.4 解構(Destructuring)
10.5 Set
10.6 while 迴圈
10.7 break 運算式
10.8 集合轉換
10.9 深入學習:陣列類型
10.10 深入學習:唯讀與不可變
10.11 挑戰練習:美化酒水單
10.12 挑戰練習:進一步美化酒水單
Chapter 11 Map
11.1 建立一個Map
11.2 讀取Map 集合的值
11.3 增加Map 集合的元素
11.4 修改Map 集合值
11.5 挑戰練習:守衛小酒館
Chapter 12 定義類別
12.1 定義一個類別
12.2 建構實例
12.3 類別函數
12.4 可見性與封裝
12.5 類別屬性
12.6 重構NyetHack
12.7 使用套件(package)
12.8 深入學習:細看var 與val 屬性
12.9 深入學習:防範競態條件(race condition)
12.10 深入學習:私有套件
Chapter 13 初始化
13.1 建構函數
13.2 初始化區塊
13.3 屬性初始化
13.4 初始化順序
13.5 延遲初始化
13.6 深入學習:初始化陷阱
13.7 挑戰練習:聖劍之謎
Chapter 14 繼承
14.1 定義Room 類別
14.2 建立子類別
14.3 類型檢測
14.4 Kotlin 類別層級
14.5 深入學習:Any
Chapter 15 物件
15.1 object 關鍵字
15.2 巢狀類別
15.3 資料類別
15.4 列舉類別
15.5 運算子重載
15.6 探索NyetHack遊戲世界
15.7 深入學習:定義結構比較
15.8 深入學習:代數資料類型
15.9 挑戰練習:「quit」命令
15.10 挑戰練習:魔力地圖
15.11 挑戰練習:搖鈴
Chapter 16 介面與抽象類別
16.1 定義介面
16.2 實作介面
16.3 預設實作
16.4 抽象類別
16.5 在NyetHack 遊戲裡打怪
Chapter 17 泛型
17.1 定義泛型類別
17.2 泛型函數
17.3 多泛型參數
17.4 泛型約束
17.5 vararg 關鍵字與get 函數
17.6 in 與out
17.7 深入學習:reified 關鍵字
Chapter 18 擴充
18.1 定義擴充函數
18.2 泛型擴充函數
18.3 擴充屬性
18.4 可空類別擴充
18.5 擴充實作揭秘
18.6 利用擴充封裝程式碼
18.7 定義擴充檔
18.8 重新命名擴充
18.9 Kotlin 標準程式庫的擴充
18.10 深入學習:帶接收者的函數文字
18.11 挑戰練習:toDragonSpeak 擴充
18.12 挑戰練習:frame 擴充
Chapter 19 函數式程式設計基礎
19.1 函數類別
19.2 為什麼要學習函數式程式設計
19.3 序列
19.4 深入學習:評估程式碼效能
19.5 深入學習:Arrow.kt
19.6 挑戰練習:Map 值反轉
19.7 挑戰練習:應用函數式程式設計
19.8 挑戰練習:滑動視窗(Sliding Window)演算法
Chapter 20 Kotlin 與Java 互動操作
20.1 與Java 類別互動操作
20.2 互通性與可空性
20.3 類型映射
20.4 getter、setter 方法與互通性
20.5 類別之外
20.6 異常與互動性
20.7 Java 的函數類型
Chapter 21 利用Kotlin 開發首個Android 應用軟體
21.1 Android Studio
21.2 定義UI
21.3 利用模擬器執行應用程式
21.4 產生角色
21.5 Activity 類別
21.6 產生實體視圖
21.7 Kotlin Android 擴充
21.8 設定按一下事件監聽器
21.9 保存實例狀態
21.10 使用擴充重構程式碼
21.11 深入學習:Android KTX 與Anko 程式庫
Chapter 22 Kotlin協程(Coroutines)簡介
22.1 解析角色資料
22.2 取得動態資料
22.3 Android 主執行緒
22.4 啟用協程
22.5 使用async指定協程
22.6 launch 與async/await
22.7 暫停函數
22.8 挑戰練習:動態資料
22.9 挑戰練習:最小力量值
Chapter 23 編後語
23.1 前方的路
23.2 打個廣告
23.3 致謝
Appendix A 術語表