目 录
封 面
译者序
致 谢
前 言
关于本书
关于读者
关于封面插图
第1章 让程序更安全
1.1 编程陷阱
1.1.1 安全的处理作用
1.1.2 用引用透明性使程序更安全
1.2 安全编程的好处
1.2.1 使用替换模型对程序进行推理
1.2.2 应用安全原则的简单示例
1.2.3 将抽象推向极限
1.3 本章小结
第2章 Kotlin中的函数式编程:概述
2.1 Kotlin中的字段和变量
2.1.1 省略类型以简化
2.1.2 使用可变字段
2.1.3 理解延迟初始化
2.2 Kotlin中的类和接口
2.2.1 使代码更加简洁
2.2.2 实现接口或扩展类
2.2.3 实例化一个类
2.2.4 重载属性构造函数
2.2.5 创建equals和hashCode方法
2.2.6 解构数据对象
2.2.7 在Kotlin中实现静态成员
2.2.8 使用单例模式
2.2.9 防止工具类实例化
2.3 Kotlin没有原语
2.4 Kotlin的两种集合类型
2.5 Kotlin的包
2.6 Kotlin的可见性
2.7 Kotlin中的函数
2.7.1 函数声明
2.7.2 使用局部函数
2.7.3 覆盖函数
2.7.4 使用扩展函数
2.7.5 使用lamdba表达式
2.8 Kotlin中的null
2.8.1 处理可空类型
2.8.2 Elvis和默认值
2.9 程序流程和控制结构
2.9.1 使用条件选择器
2.9.2 使用多条件选择器
2.9.3 使用循环
2.10 Kotlin的未检查异常
2.11 自动关闭资源
2.12 Kotlin的智能转换
2.13 相等性VS一致性
2.14 字符串插值
2.15 多行字符串
2.16 型变:参数化类型和子类型
2.16.1 为什么型变是一个潜在的问题
2.16.2 何时使用协变以及何时使用逆变
2.16.3 声明端型变与使用端型变
2.17 本章小结
第3章 用函数编程
3.1 函数是什么?
3.1.1 理解两个函数集之间的关系
3.1.2 Kotlin中反函数概述
3.1.3 处理偏函数
3.1.4 理解函数复合
3.1.5 使用多参数函数
3.1.6 柯里化函数
3.1.7 使用偏应用函数
3.1.8 没有作用的函数
3.2 Kotlin中的函数
3.2.1 将函数理解为数据
3.2.2 将数据理解为函数
3.2.3 使用对象构造函数作为函数
3.2.4 使用Kotlin的fun函数
3.2.5 使用对象表示法和函数表示法
3.2.6 使用值函数
3.2.7 使用函数引用
3.2.8 复合函数
3.2.9 重用函数
3.3 高级函数特征
3.3.1 多参数函数如何?
3.3.2 应用柯里化函数
3.3.3 实现高阶函数
3.3.4 创建多态高阶函数
3.3.5 使用匿名函数
3.3.6 定义局部函数
3.3.7 实现闭包
3.3.8 应用偏函数和自动柯里化
3.3.9 切换偏应用函数的参数
3.3.10 声明单位函数
3.3.11 使用正确的类型
3.4 本章小结
第4章 递归、尾递归和记忆化
4.1 共递归与递归
4.1.1 实现共递归
4.1.2 实现递归
4.1.3 区分递归函数和共递归函数
4.1.4 选择递归或尾递归
4.2 尾调用消除
4.2.1 使用尾调用消除
4.2.2 从循环切换到共递归
4.2.3 使用递归值函数
4.3 递归函数和列表
4.3.1 使用双递归函数
4.3.2 对列表抽象递归
4.3.3 反转列表
4.3.4 构建共递归列表
4.3.5 严格的后果
4.4 记忆化
4.4.1 在基于循环的编程中使用记忆化
4.4.2 在递归函数中使用记忆化
4.4.3 使用隐式记忆化
4.4.4 使用自动记忆化
4.4.5 实现多参数函数的记忆化
4.5 记忆函数纯吗?
4.6 本章小结
第5章 用列表处理数据
5.1 如何对数据集合进行分类
5.2 不同类型的列表
5.3 相对期望列表性能
5.3.1 用时间来交换内存空间和复杂性
5.3.2 避免就地突变
5.4 KOTLIN有哪些可用列表?
5.4.1 使用持久数据结构
5.4.2 实现不可变的、持久的单链表
5.5 列表操作中的数据共享
5.6 更多列表操作
5.6.1 标注的益处
5.6.2 连接列表
5.6.3 从列表末尾删除
5.6.4 使用递归对具有高阶函数(HOFs)的列表进行折叠
5.6.5 使用型变
5.6.6 创建foldRight的一个栈安全递归版本
5.6.7 映射和过滤列表
5.7 本章小结
第6章 处理可选数据
6.1 空指针问题
6.2 Kotlin如何处理空引用
6.3 空引用的替代方法
6.4 使用OPTION类型
6.4.1 从一个Option中获取值
6.4.2 将函数应用于可选值
6.4.3 处理Option组合
6.4.4 Option用例
6.4.5 其他组合选项的方法
6.4.6 用Option组合List
6.4.7 何时使用Option
6.5 本章小结
第7章 处理错误和异常
7.1 数据缺失的问题
7.2 Either类型
7.3 Result类型
7.4 Result模式
7.5 高级Result处理
7.6 映射Failture
7.7 添加工厂函数
7.8 应用作用
7.9 高级结果组合
7.10 本章小结
第8章 高级列表处理
8.1 长度问题
8.2 性能问题
8.3 记忆化的好处
8.3.1 处理记忆化的缺点
8.3.2 评估性能改进
8.4 List和Result组成
8.4.1 处理List返回Result
8.4.2 从List转换为Result
8.5 常见列表抽象
8.5.1 压缩和解压缩列表
8.5.2 通过索引访问元素
8.5.3 列表分裂
8.5.4 搜索子列表
8.5.5 处理列表的其它函数
8.6 列表的自动并行处理
8.6.1 并不是所有的计算都可以并行化
8.6.2 将列表分解为子列表
8.6.3 并行处理子列表
8.7 本章小结
第9章 与惰性配合
9.1 严格VS惰性
9.2 Kotlin和严格
9.3 Kotlin和惰性
9.4 懒惰的实现
9.4.1 组合惰性值
9.4.2 提升函数
9.4.3 映射和flatMapping惰性
9.4.4 用列表组成惰性
9.4.5 处理异
^ 收 起