为你推荐
本书赞誉
前言
致谢
第1章 你好Kotlin
1.1 爱上Kotlin的理由
1.1.1 多范式编程
1.1.2 具有类型推断的静态类型
1.2 为什么选择Kotlin
1.3 带Kotlin去兜兜风
1.3.1 安装Kotlin SDK
1.3.2 验证安装
1.4 编译成字节码并运行
1.4.1 在命令行上运行
1.4.2 在IDE中运行
1.4.3 使用REPL进行实验
1.4.4 作为脚本运行
1.5 编译成其他目标
1.6 选择哪个选项
1.7 本章小结
第一部分 使用Kotlin编写脚本
第2章 从Java角度了解Kotlin的基本知识
2.1 减少输入
2.1.1 分号是可选的
2.1.2 变量类型规范是可选的
2.1.3 类和函数是可选的
2.1.4 try-catch是可选的
2.2 合理的警告
2.3 选择val而不是var
2.4 改进的相等性检查
2.5 字符串模板
2.6 原始字符串
2.6.1 没有转义
2.6.2 多行字符串
2.7 更多的表达式,更少的语句
2.8 本章小结
第3章 使用函数
3.1 创建函数
3.1.1 KISS函数
3.1.2 返回类型和类型推断
3.1.3 所有的函数都是表达式
3.1.4 定义参数
3.1.5 带有块体的函数
3.2 默认参数和命名参数
3.2.1 演化带有默认参数的函数
3.2.2 使用命名参数提高可读性
3.3 vararg和spread
3.3.1 可变数量的实参
3.3.2 spread运算符
3.4 解构
3.5 本章小结
第4章 外部迭代和参数匹配
4.1 范围与迭代
4.1.1 范围类
4.1.2 正向迭代
4.1.3 反向迭代
4.1.4 跳过范围内的值
4.2 遍历数组和列表
4.3 何时应该使用when
4.3.1 when用作表达式
4.3.2 when用作语句
4.3.3 when和变量的作用域
4.4 本章小结
第5章 使用集合
5.1 集合的类型
5.1.1 Kotlin所添加的便利方法
5.1.2 视图
5.2 使用Pair和Triple
5.3 对象和基元数组
5.4 使用列表
5.5 使用集合
5.6 使用映射
5.7 本章小结
第6章 使用类型安全性解决问题
6.1 Any和Nothing类
6.1.1 Any是基类
6.1.2 Nothing比void更深入
6.2 可空的引用
6.2.1 null是件不好的事
6.2.2 使用可空类型
6.2.3 安全调用运算符
6.2.4 Elvis运算符
6.2.5 不要使用不安全的断言运算符
6.2.6 使用when
6.3 类型检查和转换
6.3.1 类型检查
6.3.2 使用is
6.3.3 智能转换
6.3.4 使用带有when的类型检查和智能转换
6.4 显式类型转换
6.5 泛型:参数类型的变化和约束
6.5.1 类型不变性
6.5.2 使用协变
6.5.3 使用逆变
6.5.4 使用where的参数类型约束
6.5.5 星投影
6.6 具体化的类型参数
6.7 本章小结
第二部分 面向对象的Kotlin
第7章 对象和类
7.1 对象和单例
7.1.1 带有对象表达式的匿名对象
7.1.2 带有对象声明的单例
7.1.3 顶级函数与单例
7.2 创建类
7.2.1 最小的类
7.2.2 只读属性
7.2.3 创建实例
7.2.4 读写属性
7.2.5 底层探秘——字段和属性
7.3 伴生对象和类成员
7.3.1 类级别成员
7.3.2 访问同伴
7.3.3 Companion作为Factory
7.3.4 不是非常静态的
7.4 创建泛型类
7.5 数据类
7.6 本章小结
第8章 类层次结构和继承
8.1 创建接口和抽象类
8.1.1 创建接口
8.1.2 创建抽象类
8.1.3 是接口还是抽象类
8.2 嵌套类和内部类
8.3 继承
8.4 Sealed类
8.5 创建和使用枚举
8.6 本章小结
第9章 通过委托进行扩展
9.1 何时选择委托而不是继承
9.2 使用委托进行设计
9.2.1 一个设计问题
9.2.2 继承的错误指向
9.2.3 委托——艰难的方式
9.2.4 使用Kotlin的by来进行委托
9.3 委托给一个参数
9.4 处理方法冲突
9.5 Kotlin委托的注意事项
9.6 委托变量和属性
9.6.1 委托变量
9.6.2 委托属性
9.7 内置的标准委托
9.7.1 有点儿懒惰也没关系
9.7.2 Observable委托
9.7.3 行使你的可否决权利
9.8 本章小结
第三部分 函数式Kotlin
第10章 使用lambda进行函数式编程
10.1 函数式风格
10.1.1 什么是函数式风格
10.1.2 为什么以及何时使用函数式风格
10.2 lambda表达式
10.2.1 lambda的结构
10.2.2 传递lambda
10.2.3 使用隐式参数
10.2.4 接收lambda
10.2.5 用lambda作为最后一个参数
10.2.6 使用函数引用
10.2.7 函数返回函数
10.3 lambda和匿名函数
10.4 闭包和词法作用域
10.5 非局部和带标签的return
10.5.1 默认情况下不允许使用return
10.5.2 带标签的return
10.5.3 非局部return
10.6 带有lambda的内联函数
10.6.1 默认情况下没有内联优化
10.6.2 内联优化
10.6.3 对参数精心选择noinline
10.6.4 内联lambda中允许非局部return
10.6.5 crossinline参数
10.6.6 inline和return的良好实践
10.7 本章小结
第11章 内部迭代和延迟计算
11.1 外部迭代器与内部迭代器
11.2 内部迭代器
11.2.1 filter﹑map和reduce
11.2.2 得到第一个和最后一个
11.2.3 flatten和flatMap
11.2.4 排序
11.2.5 将对象进行分组
11.3 延迟计算序列
11.3.1 使用序列提高性能
11.3.2 无限序列
11.4 本章小结
第四部分 优雅且高效的Kotlin
第12章 Kotlin的流畅性
12.1 重载运算符
12.2 使用扩展函数和属性进行注入
12.2.1 使用扩展函数注入方法
12.2.2 使用扩展函数注入运算符
12.2.3 使用扩展属性注入属性
12.2.4 注入第三方类
12.2.5 注入静态方法
12.2.6 从类内注入
12.3 扩展函数
12.4 带中缀的函数流畅性
12.5 带Any对象的流畅性
12.5.1 四种方法的行为
12.5.2 来自冗长和混乱的代码
12.5.3 使用apply删除重复的引用
12.5.4 使用run获得结果
12.5.5 使用let将对象作为参数传递
12.5.6 使用also将void函数链接起来
12.6 隐式接收方
12.6.1 传递一个接收方
12.6.2 带接收方的多个作用域
12.7 本章小结
第13章 创建内部DSL
13.1 DSL的类型和特征
13.1.1 外部DSL与内部DSL
13.1.2 语境驱动和流畅
13.2 用于内部DSL的Kotlin
13.2.1 分号可选
13.2.2 点和圆括号不与中缀在一起
13.2.3 使用扩展函数获得特定的域
13.2.4 传递lambda不需要圆括号
13.2.5 隐式接收方影响DSL的创建
13.2.6 还有一些特性可以帮助DSL
13.3 构建流畅性方面的挑战
13.3.1 使用扩展函数
13.3.2 使用接收方和中缀
13.4 类型安全构建器
13.4.1 HTML构建器
13.4.2 XML构建器
13.5 使用作用域控制来缩小访问范围
13.6 本章小结
第14章 编写递归和记忆
14.1 递归的威力和危险
14.2 尾调用优化
14.3 记忆
14.3.1 重复计算
14.3.2 记忆——Kotlin中的Groovy方法
14.3.3 记忆作为委托
14.4 将记忆应用于动态规划
14.5 本章小结
第五部分 编写异步应用程序
第15章 探索协程
15.1 协程和并发
15.1.1 并行与并发
15.1.2 协程作为协作函数
15.2 使用协程并发运行
15.2.1 从顺序执行开始
15.2.2 创建一个协程
15.2.3 启动一个任务
15.2.4 与挂起点交错调用
15.3 协程上下文和线程
15.3.1 显式设置上下文
15.3.2 在自定义池中运行
15.3.3 在挂起点后切换线程
15.3.4 修改CoroutineContext
15.4 调试协程
15.4.1 async 和await
15.4.2 看一眼延续
15.5 创建无限序列
15.5.1 使用序列
15.5.2 使用iterator函数
15.6 本章小结
第16章 异步编程
16.1 非阻塞异步编程
16.1.1 按顺序开始
16.1.2 进行异步
16.2 异常处理
16.2.1 启动和异常
16.2.2 异步和异常
16.3 取消和超时
16.3.1 取消协程
16.3.2 请勿打扰
16.3.3 双向取消
16.3.4 监督作业
16.3.5 编程时使用超时
16.4 本章小结
第六部分 互操作和测试
第17章 将Java与Kotlin混合使用
17.1 联合编译
17.2 从Kotlin调用Java
17.3 从Java调用Kotlin
17.3.1 使用Java中的重载运算符
17.3.2 创建静态方法
17.3.3 传递lambda
17.3.4 添加throws子句
17.3.5 使用带默认参数的函数
17.3.6 访问顶级函数
17.3.7 更多注释
17.4 本章小结
第18章 使用Kotlin进行单元测试
18.1 被测试的代码
18.2 获取项目文件
18.2.1 设置Gradle
18.2.2 设置Maven
18.3 从Canary测试开始
18.4 编写经验测试
18.5 编写数据驱动的测试
18.6 模拟依赖项
18.6.1 创建交互测试
18.6.2 测试解析数据
18.7 测试顶级函数
18.8 测试协程和异步调用
18.9 与服务集成
18.10 查看代码覆盖率
18.11 将应用程序用于驱动
18.12 本章小结
第19章 使用Kotlin编写Spring应用程序
19.1 创建一个Starter项目
19.2 创建一个控制器
19.3 创建一个实体类
19.4 创建一个存储库接口
19.5 创建一个服务
19.6 将服务与控制器集成
19.7 继续实践
19.8 本章小结
第20章 使用Kotlin编写Android应用程序
20.1 创建一个项目
20.2 定义域对象
20.3 创建布局
20.4 实施活动
20.5 更新RecyclerView
20.6 查看应用程序的运行情况
20.7 本章小结
附录1 转换为JavaScript
附录2 Kotlin/Native
附录3 Kotlin到WebAssembly
参考文献
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜