书籍详情
Kotlin编程权威指南
作者:乔希·斯基恩(Josh Skeen),戴维·格林哈尔希(David Greenhalgh) 著,王明发 译
出版社:人民邮电出版社
出版时间:2019-08-01
ISBN:9787115515636
定价:¥99.00
购买这本书可以去
内容简介
本书由知名技术培训机构Big Nerd Ranch打造,秉承其一贯的简洁、实用的写作风格。Kotlin已成为Android官方支持的开发语言,但它具有平台独立性,亦可用于开发各种类型的原生应用。本书将带领你通过搭建书中的示例项目来循序渐进地掌握Kotlin 的用法。首先使用IntelliJ IDEA搭建沙盒项目,帮助你熟悉开发环境。接下来介绍Kotlin编程知识,从较为基础的变量、常量、类型等讲起,逐渐深入到继承、对象和抽象类。最后是函数式编程、Kotlin与Java互操作、构建Android应用等较复杂的内容。多章配有习题,帮你温故知新,巩固所学知识。
作者简介
作者简介乔希·斯基恩(Josh Skeen)软件开发工程师,Big Nerd Ranch培训师,在世界各地讲授Java、Android应用开发以及Kotlin的课程。毕业于库伯高等科学艺术联盟学院。戴维·格林哈尔希(David Greenhalgh)Android开发人员,Big Nerd Ranch培训师。毕业于佐治亚理工学院。译者简介王明发毕业于华东理工大学。软件开发及项目管理者,拥有十多年的软件开发及项目管理经验。除本书之外,另译有《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
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
猜您喜欢