| 作者 |
| 肯·寇森 霍丙乾 |
| 丛书名 |
| O’Reilly精品图书系列 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9782007141059 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 ---------------------------Kotlin编程实践--------------------------- 本书的重点不仅在于讲解 Kotlin 的语法与语义,还将展示何时以及为何应该使用某个指定的语言特性。本书的目标不一定会涵盖每一个 Kotlin 语法与库的细节。但在最后,本书添加了很多基本原理的内容,让即使只有 Kotlin 初级知识的读者也可以理解本书的内容。当你认真学习 Kotlin 的细节后,你就可以使用这门受欢迎的语言构建 Android 应用、Web 应用以及其他程序。Kotlin 不仅可以用于任何应用 Java 的地方,还可以用于 iOS 开发、编写原生应用程序、JavaScript 开发以及更多场景。 ---------------------------深入理解Kotlin协程--------------------------- 内容简介 这是一部从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等多个维度全面讲解Kotlin协程的专著,它同时提供了多语言视角,亦可通过本书了解其他语言的协程。 本书作者是腾讯的的高级工程师,是国内Kotlin领域的先驱者和布道者,不仅在工程实践领域积累了丰富的经验,而且在Kotlin开发者社群里有广泛的影响力和号召力。 全书共9章: 第1章从协程的核心应用场景——异步程序设计的思路和关键问题切入,引出Kotlin协程的概念; 第2章首先介绍了协程的概念、分类,然后讲解了Python、Lua、Go等不同语言的协程实现和对比; 第3~4章以 Kotlin 标准库的协程 API 为核心,讲解了简单协程的使用方法和运行机制,以及通过简单协程设计和实现复合协程的思路和方法; 第5~6章以Kotlin的官方协程框架为模板,通过逐步实现其中的核心功能,分析了其中的实现细节和复合协程的运行机制,并对框架的使用做了深入探讨; . 第7~8章讲解了协程在Android应用开发和Web服务开发中的应用场景、面临的挑战,以及解决各种常见问题的方法和思路; 第9章探讨了JavaScript 和 Native等非JVM平台对协程的支持情况,以及协程在这些平台上的应用。 |
| 目录 |
---------------------------Kotlin编程实践--------------------------- 序言 1 前言 3 第1章 安装并运行Kotlin 11 1.1 在没有本地编译器的情况下运行Kotlin 11 1.2 在本地安装Kotlin 13 1.3 在命令行中编译并运行Kotlin 15 1.4 使用Kotlin REPL 16 1.5 执行Kotlin脚本 17 1.6 使用GraalVM构建独立应用程序 18 1.7 为Gradle添加Kotlin插件(Groovy语法) 21 1.8 为Gradle添加Kotlin插件(Kotlin语法) 24 1.9 使用Gradle构建Kotlin工程 26 1.10 使用Maven编译Kotlin 27 第2章 Kotlin基础 31 2.1 在Kotlin中使用可空类型 31 2.2 在Java中添加可空指示器 34 2.3 为Java添加重载方法 36 2.4 显式类型转换 40 2.5 打印不同的进制 42 2.6 数幂 44 2.7 使用移位运算符 46 2.8 使用位布尔运算符 49 2.9 使用to函数创建Pair实例 52 第3章 Kotlin中的面向对象编程 55 3.1 理解const与val的不同之处 55 3.2 创建自定义的getter与setter 56 3.3 定义数据类 59 3.4 幕后属性技术 62 3.5 操作符重载 65 3.6 使用lateinit进行延迟初始化 67 3.7 使用安全转换函数、恒等操作符,以及Elvis操作符覆盖equals函数 70 3.8 创建单例 72 3.9 无事生非 75 第4章 函数式编程 79 4.1 在算法中使用fold 79 4.2 使用reduce函数进行归约 82 4.3 使用尾递归 84 第5章 集合 89 5.1 使用数组 89 5.2 创建集合 92 5.3 为已存在的集合创建只读视图 94 5.4 从集合构建map 96 5.5 当集合为空的时候返回默认值 97 5.6 将变量限制在给定区间 98 5.7 处理集合中的窗口 100 5.8 解构list 102 5.9 将多个属性排序 103 5.10 自定义迭代器 105 5.11 根据类型过滤集合 107 5.12 在数列中创建区间 108 第6章 序列 113 6.1 使用懒序列 113 6.2 生成序列 115 6.3 管理无限序列 117 6.4 以固定间隔从序列生成元素 119 第7章 作用域函数 123 7.1 使用apply函数在构造结束之后初始化对象 123 7.2 使用also函数进行其他操作 124 7.3 使用let函数与Elvis 126 7.4 使用let函数代替临时变量 128 第8章 Kotlin委托 131 8.1 使用委托实现组合 131 8.2 使用lazy委托 134 8.3 确保值不为空 136 8.4 使用observable与vetoable委托 137 8.5 使用映射作为委托 141 8.6 创建你自己的委托 143 第9章 测试 147 9.1 设置测试类的生命周期 147 9.2 使用数据类进行测试 152 9.3 使用帮助函数并使用默认参数 154 9.4 使用不同的参数重复JUnit 5的测试 156 9.5 使用数据类进行参数化测试 159 第10章 输入/输出 161 10.1 使用use函数管理资源 161 10.2 写文件 164 第11章 其他 167 11.1 在代码中获取Kotlin版本号 167 11.2 重复执行lambda表达式 169 11.3 强制when语句进行穷举 170 11.4 在正则表达式中使用replace函数 172 11.5 转换为二进制字符串并返回 174 11.6 使一个类可执行 176 11.7 测量经过时间 179 11.8 启动线程 180 11.9 使用TODO强制完成 183 11.10 理解Random的随机行为 185 11.11 在函数命名中使用特殊字符 187 11.12 告知Java处理异常 188 第12章 Spring框架 191 12.1 开放用于继承的Spring管理的bean类 191 12.2 持久化Kotlin数据类 194 12.3 依赖注入 196 第13章 协程与结构化并发 201 13.1 选择协程构建器 201 13.2 使用withContext替换async/await 207 13.3 使用协程调度器 208 13.4 在Java线程池上运行协程 210 13.5 取消协程 213 13.6 协程调试 216 ---------------------------深入理解Kotlin协程--------------------------- 前言 第1章 异步程序设计介绍 1 1.1 异步的概念 1 1.1.1 程序的执行 1 1.1.2 异步与回调 2 1.1.3 回调地狱 3 1.2 异步程序设计的关键问题 4 1.2.1 结果传递 4 1.2.2 异常处理 6 1.2.3 取消响应 8 1.2.4 复杂分支 9 1.3 常见异步程序设计思路 10 1.3.1 Future 11 1.3.2 CompletableFuture 11 1.3.3 Promise与async/await 13 1.3.4 响应式编程 15 1.3.5 Kotlin协程 15 1.4 本章小结 17 第2章 协程的基本概念 18 2.1 协程究竟是什么 18 2.2 协程的分类 20 2.2.1 按调用栈分类 20 2.2.2 按调度方式分类 22 2.3 协程的实现举例 22 2.3.1 Python的Generator 23 2.3.2 Lua标准库的协程实现 24 2.3.3 Go的go routine 27 2.4 本章小结 30 第3章 Kotlin协程的基础设施 31 3.1 协程的构造 31 3.1.1 协程的创建 32 3.1.2 协程的启动 32 3.1.3 协程体的Receiver 34 3.1.4 可挂起的main函数 36 3.2 函数的挂起 37 3.2.1 挂起函数 37 3.2.2 挂起点 38 3.2.3 CPS变换 39 3.3 协程的上下文 41 3.3.1 协程上下文的集合特征 41 3.3.2 协程上下文元素的实现 42 3.3.3 协程上下文的使用 43 3.4 协程的拦截器 45 3.4.1 拦截的位置 45 3.4.2 拦截器的使用 46 3.4.3 拦截器的执行细节 47 3.5 Kotlin协程所属的类别 48 3.5.1 调用栈的广义和狭义 48 3.5.2 调度关系的对立与统一 49 3.6 本章小结 50 第4章 Kotlin协程的拓展实践 51 4.1 序列生成器 51 4.1.1 仿Python的Generator实现 52 4.1.2 标准库的序列生成器介绍 56 4.2 Promise模型 57 4.2.1 async/await与suspend的设计对比 58 4.2.2 仿JavaScript的async/await实现 59 4.3 Lua风格的协程API 61 4.3.1 非对称API实现 61 4.3.2 对称API实现 67 4.4 再谈协程的概念 72 4.4.1 简单协程与复合协程 73 4.4.2 复合协程的实现模式 73 4.5 本章小结 74 第5章 Kotlin协程框架开发初探 75 5.1 开胃菜:实现一个delay函数 75 5.2 协程的描述 77 5.2.1 协程的描述类 78 5.2.2 协程的状态 79 5.2.3 支持回调的状态 80 5.2.4 协程的初步实现 83 5.3 协程的创建 84 5.3.1 无返回值的launch 84 5.3.2 实现invokeOnCompletion 85 5.3.3 实现join 89 5.3.4 有返回值的async 90 5.4 协程的调度 92 5.4.1 协程的执行调度 92 5.4.2 协程的调度位置 93 5.4.3 协程的调度器设计 93 5.4.4 基于线程池的调度器 94 5.4.5 基于UI事件循环的调度器 96 5.4.6 为协程添加默认调度器 97 5.5 协程的取消 98 5.5.1 完善协程的取消逻辑 98 5.5.2 支持取消的挂起函数 100 5.5.3 CancellableContinuation的实现 103 5.5.4 改造挂起函数 106 5.6 协程的异常处理 109 5.6.1 定义异常处理器 110 5.6.2 处理协程的未捕获异常 111 5.6.3 区别对待取消异常 111 5.6.4 异常处理器的运用 113 5.7 协程的作用域 113 5.7.1 作用域的概念 113 5.7.2 作用域的声明 114 5.7.3 建立父子关系 116 5.7.4 顶级作用域 116 5.7.5 协同作用域 117 5.7.6 suspend fun main的作用域 119 5.7.7 实现异常的传播 120 5.7.8 主从作用域 121 5.7.9 完整的异常处理流程 122 5.7.10 父协程等待子协程完成 122 5.8 本章小结 123 第6章 Kotlin协程的官方框架 124 6.1 协程框架概述 124 6.1.1 框架的构成 124 6.1.2 协程的启动模式 126 6.1.3 协程的调度器 127 6.1.4 协程的全局异常处理器 129 6.1.5 协程的取消检查 130 6.1.6 协程的超时取消 132 6.1.7 禁止取消 133 6.2 热数据通道Channel 134 6.2.1 认识Channel 134 6.2.2 Channel的容量 136 6.2.3 迭代Channel 138 6.2.4 produce和actor 138 6.2.5 Channel的关闭 140 6.2.6 BroadcastChannel 142 6.2.7 Channel版本的序列生成器 144 6.2.8 Channel的内部结构 146 6.3 冷数据流Flow 148 6.3.1 认识Flow 149 6.3.2 对比RxJava的线程切换 150 6.3.3 冷数据流 151 6.3.4 异常处理 151 6.3.5 末端操作符 153 6.3.6 分离Flow的消费和触发 153 6.3.7 Flow的取消 154 6.3.8 其他Flow的创建方式 155 6.3.9 Flow的背压 155 6.3.10 Flow的变换 157 6.4 多路复用select 158 6.4.1 复用多个await 158 6.4.2 复用多个Channel 160 6.4.3 SelectClause 161 6.4.4 使用Flow实现多路复用 161 6.5 并发安全 163 6.5.1 不安全的并发访问 163 6.5.2 协程的并发工具 164 6.5.3 避免访问外部可变状态 165 6.6 本章小结 166 第7章 Kotlin协程在Android上的应用 167 7.1 Android上的异步问题 167 7.1.1 基于UI的异步问题分析 167 7.1.2 “鸡肋”的AsyncTask 169 7.1.3 “烫手”的回调 169 7.1.4 “救世”的RxJava 170 7.2 协程对UI的支持 173 7.2.1 UI调度器 173 7.2.2 协程版AutoDispose 174 7.2.3 Lifecycle的协程支持 176 7.3 常见框架的协程扩展 177 7.3.1 RxJava的扩展 177 7.3.2 异步组件ListenableFuture 179 7.3.3 ORM框架Room 180 7.3.4 图片加载框架coil 181 7.3.5 网络框架Retrofit 182 7.3.6 协程风格的对话框 183 7.4 本章小结 184 第8章 Kotlin协程在Web服务中的应用 185 8.1 多任务并发模型 185 8.1.1 多进程的服务模型 185 8.1.2 多线程的服务模型 186 8.1.3 事件驱动与异步I/O 186 8.2 协程在多任务模型中的运用 190 8.2.1 协程与异步I/O 191 8.2.2 协程与“轻量级线程” 192 8.3 常见Web应用框架的协程扩展 193 8.3.1 Spring的响应式支持 193 8.3.2 Vert.x 196 8.3.3 Ktor 199 8.4 本章小结 203 第9章 Kotlin协程在其他平台上的应用 204 9.1 Kotlin-Js 204 9.1.1 Kotlin-Js概述 205 9.1.2 Kotlin-Js上的协程 209 9.2 Kotlin-Native 212 9.2.1 Kotlin-Native概述 212 9.2.2 Kotlin-Native的协程支持 218 9.3 本章小结 221 |