这书由阿里巴巴Java程序猿编写,陪你迅速进到Kotlin全球。这书根据Kotli1.1版本,从Kotlin基础知识到动手能力实战,包括了很多优选示例编码和运用案例。
这书从Kotlin的HelloWorld刚开始,栩栩如生解读Kotlin的基础知识和实战案例,分成两绝大多数:“基础知识”一部分包含語言基本、基础基本数据类型与种类自变量、结合类、泛型、面向对象编程、函数式编程、协程等;“实战”一部分包含Kotlin与Java互操作、应用Kotlin集成化SpringBoot开发WEB服务器端、应用Kotlin集成化Gradle开发、应用Kotlin和Anko的Android开发、应用KotliDSL、Kotlin文档IO实际操作与c#多线程、应用KotliNative。这书包括了很多优选示例编码和运用案例,为新手出示了好用手册,也协助娴熟的Java开发者迅速转换到Kotlin。
目录
- 序 言
- 前 言
- 第一部分 Kotlin语言基础
- 第1章 Kotlin简介 2
- 1.1 Kotlin简史 2
- 1.1.1 Kotlin概述 3
- 1.1.2 Kotlin元年:2016 3
- 1.2 快速学习工具 4
- 1.2.1 云端IDE 4
- 1.2.2 本地命令行环境搭建 5
- 1.2.3 使用IntelliJ IDEA 9
- 1.2.4 使用Eclipse 13
- 1.2.5 使用Gradle构建Kotlin项目 17
- 1.2.6 编程语言学习小结 18
- 1.3 本章小结 20
- 第2章 快速开始HelloWorld 21
- 2.1 命令行版HelloWorld 21
- 2.2 应用程序版HelloWorld 21
- 2.3 Web RESTful HelloWorld 24
- 2.4 Android版的HelloWorld 34
- 2.5 JavaScript版HelloWorld 39
- 2.6 本章小结 49
- 第3章 Kotlin语言基础 50
- 3.1 包 50
- 3.2 声明变量和值 56
- 3.3 变量类型推断 57
- 3.3.1 省去变量类型 57
- 3.3.2 使用is运算符进行类型检测 59
- 3.4 字符串与其模板表达式 59
- 3.5 流程控制语句 60
- 3.5.1 if表达式 60
- 3.5.2 when表达式 62
- 3.5.3 for循环 64
- 3.5.4 while循环 64
- 3.5.5 break和continue 65
- 3.5.6 return 66
- 3.5.7 标签 69
- 3.5.8 throw表达式 71
- 3.6 代码注释 72
- 3.7 语法与标识符 73
- 3.7.1 修饰符 73
- 3.7.2 关键字(保留字) 75
- 3.7.3 操作符和操作符的重载 81
- 3.7.4 操作符优先级 82
- 3.7.5 一元操作符 83
- 3.7.6 二元操作符 85
- 3.8 扩展函数和扩展属性 90
- 3.8.1 扩展函数 90
- 3.8.2 扩展属性 93
- 3.9 空指针安全 93
- 3.10 标准库API简介 96
- 3.11 本章小结 97
- 第4章 基本数据类型与类型系统 98
- 4.1 什么是类型 98
- 4.2 编译时类型与运行时类型 100
- 4.2.1 弱类型与强类型 100
- 4.2.2 静态类型与动态类型 101
- 4.2.3 显式类型与隐式类型 101
- 4.3 根类型Any 101
- 4.4 基本类型 102
- 4.4.1 数字类型 104
- 4.4.2 字符类型与转义符 109
- 4.4.3 布尔类型 111
- 4.4.4 字符串类型 112
- 4.4.5 数组类型 117
- 4.5 可空类型 120
- 4.5.1 Kotlin中的null 120
- 4.5.2 可空类型String?与安全调用?. 122
- 4.5.3 可空性的实现原理 124
- 4.5.4 可空类型层次体系 126
- 4.6 kotlin.Unit类型 127
- 4.7 kotlin.Nothing类型 128
- 4.8 类型检测与类型转换 131
- 4.8.1 is与!is运算符 131
- 4.8.2 as运算符 133
- 4.9 本章小结 134
- 第二部分 编程进阶
- 第5章 集合类 136
- 5.1 集合类的基本概念 136
- 5.1.1 集合类是一种数据结构 137
- 5.1.2 集合类是ADT 137
- 5.1.3 连续存储和离散存储 138
- 5.2 Kotlin集合类简介 138
- 5.3 List 139
- 5.3.1 创建不可变List 140
- 5.3.2 创建可变集合MutableList 142
- 5.3.3 遍历List元素 143
- 5.3.4 List元素操作函数 146
- 5.3.5 List集合类的基本运算函数 151
- 5.3.6 过滤操作函数 159
- 5.3.7 映射操作函数 166
- 5.3.8 分组操作函数 169
- 5.3.9 排序操作符 170
- 5.3.10 生产操作符 171
- 5.4 Set 174
- 5.4.1 空集 174
- 5.4.2 创建Set 176
- 5.4.3 使用Java中的Set类 177
- 5.4.4 Set元素的加减操作plus minus 179
- 5.5 Map 179
- 5.5.1 创建Map 180
- 5.5.2 访问Map的元素 184
- 5.5.3 Map操作符函数 186
- 5.6 本章小结 192
- 第6章 泛型 193
- 6.1 泛型简介 193
- 6.1.1 泛型与多态 193
- 6.1.2 为何引进泛型 194
- 6.1.3 Java与Kotlin中的泛型 195
- 6.2 型变 197
- 6.2.1 Java的类型通配符 197
- 6.2.2 泛型和数组的型变 201
- 6.3 Kotlin中的泛型 205
- 6.3.1 out T与in T 205
- 6.3.2 声明处型变 206
- 6.3.3 类型投影 206
- 6.4 泛型类 207
- 6.5 泛型函数 208
- 6.6 本章小结 208
- 第7章 面向对象编程 209
- 7.1 面向对象编程思想 209
- 7.1.1 一切皆是映射 209
- 7.1.2 二进制01与易经阴阳 211
- 7.1.3 从面向过程到面向对象 212
- 7.2 类与构造函数 215
- 7.2.1 声明类 216
- 7.2.2 构造函数 216
- 7.2.3 类的属性 218
- 7.2.4 函数(方法) 219
- 7.3 抽象类 219
- 7.3.1 抽象类的定义 219
- 7.3.2 抽象函数 220
- 7.3.3 抽象属性和抽象类 221
- 7.4 接口 223
- 7.4.1 接口定义 223
- 7.4.2 实现接口 224
- 7.4.3 覆盖冲突 225
- 7.4.4 接口中的属性 225
- 7.5 抽象类和接口的差异 226
- 7.6 继承 227
- 7.6.1 open类 227
- 7.6.2 多重继承 228
- 7.7 枚举类 230
- 7.7.1 枚举类基本用法 231
- 7.7.2 初始化枚举值 231
- 7.7.3 使用枚举常量 232
- 7.8 注解类 233
- 7.8.1 声明注解 233
- 7.8.2 使用注解 234
- 7.9 单例模式与伴生对象 234
- 7.9.1 单例模式 234
- 7.9.2 object对象 235
- 7.9.3 嵌套object对象 236
- 7.9.4 匿名object 238
- 7.9.5 伴生对象 239
- 7.10 密封类 242
- 7.11 数据类 243
- 7.11.1 构造函数中的val/var 243
- 7.11.2 领域实体类 245
- 7.11.3 数据类的概念 245
- 7.11.4 数据类的限制 246
- 7.11.5 数据类的解构 248
- 7.11.6 标准数据类Pair和Triple 248
- 7.12 嵌套类 249
- 7.12.1 嵌套类:类中的类 249
- 7.12.2 内部类 250
- 7.12.3 匿名内部类 250
- 7.13 委托 252
- 7.13.1 代理模式 252
- 7.13.2 类的委托 253
- 7.13.3 委托属性 255
- 7.14 本章小结 260
- 第8章 函数式编程 261
- 8.1 函数式编程概述 261
- 8.1.1 函数式编程与面向对象编程 262
- 8.1.2 函数式编程基本特性 265
- 8.1.3 函数式编程核心思想 266
- 8.2 在Kotlin中使用函数式编程 284
- 8.2.1 Kotlin中的函数 284
- 8.2.2 扩展函数 286
- 8.2.3 中缀函数 286
- 8.2.4 函数参数 287
- 8.2.5 函数返回类型 289
- 8.2.6 单表达式函数 289
- 8.2.7 函数作用域 289
- 8.2.8 泛型函数 290
- 8.2.9 高阶函数 290
- 8.2.10 匿名函数 291
- 8.2.11 Lambda表达式 291
- 8.2.12 it:单个参数的隐式名称 292
- 8.2.13 闭包 292
- 8.2.14 带接收者的函数字面值 293
- 8.2.15 具体化的类型参数 293
- 8.2.16 尾递归tailrec 294
- 8.3 本章小结 295
- 第9章 轻量级线程:协程 296
- 9.1 协程的基本概念 296
- 9.2 协程的基本操作 297
- 9.2.1 搭建项目 297
- 9.2.2 简单协程示例 298
- 9.2.3 使用launch函数启动协程 299
- 9.2.4 CommonPool对象 299
- 9.2.5 挂起函数 301
- 9.2.6 runBlocking函数 302
- 9.2.7 等待一个协程任务执行完毕 303
- 9.2.8 取消协程 306
- 9.2.9 协程取消失效 307
- 9.2.10 计算代码协程的取消方式 308
- 9.2.11 在f?inally中的协程代码 310
- 9.2.12 协程中不被取消的代码块 312
- 9.2.13 设置协程超时时间 313
- 9.3 挂起函数 314
- 9.3.1 按默认顺序执行 314
- 9.3.2 使用异步并发执行 315
- 9.4 协程上下文与调度器 316
- 9.4.1 调度和线程 316
- 9.4.2 父子协程 318
- 9.5 通道与管道 319
- 9.5.1 通道vs阻塞队列 319
- 9.5.2 关闭通道和迭代遍历元素 320
- 9.5.3 生产者-消费者模式 321
- 9.5.4 使用管道生产无限序列 322
- 9.5.5 管道与无穷质数序列 323
- 9.5.6 通道缓冲区 324
- 9.5.7 构建无穷惰性序列 324
- 9.6 协程与线程 325
- 9.6.1 轻量级的协程 325
- 9.6.2 协程vs守护线程 326
- 9.6.3 区别 327
- 9.6.4 协程的好处 328
- 9.6.5 Kotlin协程的内部机制 328
- 9.7 本章小结 329
- 第10章 Kotlin与Java互操作 330
- 10.1 在Kotlin中调用Java 330
- 10.1.1 调用Okhttp库示例 331
- 10.1.2 使用Java的集合类 332
- 10.1.3 调用Java中的Getter和Setter 333
- 10.1.4 调用Java中返回void的方法 334
- 10.1.5 调用来自Java中的null 335
- 10.1.6 使用Java的泛型 336
- 10.1.7 数组的互操作 337
- 10.1.8 可变参数的互操作 337
- 10.1.9 检查Java中的异常 337
- 10.1.10 调用Java的Object方法 338
- 10.1.11 访问Java静态成员 340
- 10.1.12 使用Java的反射 340
- 10.1.13 SAM转换 341
- 10.2 在Java中调用Kotlin 342
- 10.2.1 访问Kotlin属性 342
- 10.2.2 调用Kotlin的包级函数 344
- 10.2.3 调用Kotlin中的实例字段 347
- 10.2.4 调用Kotlin中的静态字段 348
- 10.2.5 调用Kotlin中的静态方法 349
- 10.2.6 Kotlin与Java的可见性 350
- 10.2.7 生成默认参数函数的重载 352
- 10.2.8 显式声明Kotlin中的异常 353
- 10.2.9 关键字冲突的互操作 355
- 10.2.10 Nothing类型 355
- 10.3 类型映射 356
- 10.4 Kotlin与Java的简单实例对比 357
- 10.5 本章小结 364
- 第三部分 综合实战
- 第11章 使用Kotlin集成Spring Boot开发Web服务端 366
- 11.1 Spring Boot简介 366
- 11.2 系统架构技术栈 367
- 11.3 准备工作 367
- 11.3.1 创建工程 367
- 11.3.2 Gradle配置文件说明 369
- 11.4 数据库层开发 370
- 11.4.1 Endpoint监控接口 373
- 11.4.2 实体类 375
- 11.4.3 数据访问层代码 377
- 11.5 后端逻辑开发 379
- 11.5.1 控制器逻辑层 379
- 11.5.2 启动初始化CommandLine-Runner 380
- 11.5.3 应用启动类 380
- 11.5.4 Model数据绑定 382
- 11.5.5 模板引擎视图页面 383
- 11.5.6 运行测试 383
- 11.6 前端后端集成 384
- 11.6.1 引入前端组件 384
- 11.6.2 实现写文章模块 386
- 11.6.3 加上导航栏 388
- 11.6.4 抽取公共模板文件 389
- 11.6.5 写文章的控制器层接口 390
- 11.6.6 前端Ajax请求 390
- 11.6.7 文章详情页 391
- 11.6.8 添加Markdown支持 393
- 11.6.9 文章列表分页搜索 395
- 11.7 Spring 5.0对Kotlin的支持 397
- 11.8 本章小结 399
- 第12章 使用Kotlin集成Gradle开发 400
- 12.1 使用Gradle构建Kotlin工程 400
- 12.2 使用Kotlin编写Gradle构建配置文件 405
- 12.3 本章小结 407
- 第13章 使用Kotlin和Anko的Android开发 408
- 13.1 什么是Anko 408
- 13.2 快速入门实例 409
- 13.2.1 功能介绍 410
- 13.2.2 使用Android Studio新建项目 411
- 13.2.3 设计UI界面主题颜色 415
- 13.2.4 核心依赖配置 417
- 13.2.5 代码编写 421
- 13.2.6 运行测试 435
- 13.3 本章小结 437
- 第14章 使用 Kotlin DSL 438
- 14.1 什么是DSL 439
- 14.2 Kotlin的DSL特性支持 441
- 14.3 使用kotlinx.html DSL写前端代码 442
- 14.4 实现一个极简的HTTP DSL 447
- 14.5 本章小结 454
- 第15章 Kotlin 文件IO操作与多线程 455
- 15.1 Kotlin IO基本操作 455
- 15.1.1 终端IO操作 455
- 15.1.2 读文件 456
- 15.1.3 写文件 457
- 15.1.4 遍历文件树 458
- 15.1.5 网络IO操作 459
- 15.1.6 kotlin.io标准库 460
- 15.1.7 执行Shell命令行 461
- 15.2 正则表达式 463
- 15.2.1 构造Regex表达式 463
- 15.2.2 Regex类中的函数 463
- 15.2.3 使用Java正则表达式类 465
- 15.3 Kotlin的多线程 466
- 15.3.1 创建线程 466
- 15.3.2 同步方法和块 467
- 15.3.3 可变字段 468
- 15.4 本章小结 469
- 第16章 使用 Kotlin Native 470
- 16.1 Kotlin Native简介 470
- 16.2 快速开始Hello World 471
- 16.3 Kotlin Native与C语言互操作 477
- 16.4 Kotlin Native编译器konan简介 486
- 16.5 本章小结 494