全新正版书籍,24小时发货,可开发票。
¥ 41.5 5.3折 ¥ 79 全新
库存10件
作者霍丙乾
出版社机械工业出版社
ISBN9787111655916
出版时间2020-06
装帧平装
开本16开
定价79元
货号28973005
上书时间2024-12-19
我应该算是国内比较早接触和使用Kotlin的开发者了。
知道这门语言完全是个偶然。当时我还在阿里巴巴实习,周末没事去公司蹭吃蹭喝蹭电脑,编译了Hotspot源码觉得还不过瘾,又开始编译IntelliJ IDEA的社区版。
某天下午我遇到件烦心事,编译并不是很顺利。我发现有一种没见过的后缀为kt的文件,顿时感到压力倍增,Groovy和Scala我还没学会呢,怎么又来一个!不过,当时我只是按照说明把Kotlin的环境搭建好,并没有继续理会这门还处在v0.8的语言。
毕业之后我就职于腾讯地图,得益于团队良好的技术氛围以及对新人的鼓励和信任,入职年就能有机会负责重构地图SDK,后来为团队贡献了不少公共组件。整个过程中我既充分感受到了Java的魅力,也发现了它在开发效率上的不足。于是我试着用Groovy、Scala甚至Python来开发Android,但都不太理想,后想起JetBrains家的“小儿子”Kotlin,结果就一发不可收拾。
Lambda,我所欲也;扩展函数,亦我所欲也。二者居然可兼得。后来我的业余时间也从研究“茴香豆的‘茴’有几种写法”变成了研究“这段Java代码用Kotlin能怎么简化”。可是,当时身边的同事和同行似乎并没有对Java感到疲惫,于是我又开始试着录视频、写文章,终走上了Kotlin的布道之路。
幸运的是,Kotlin在2017年的Google I/O大会上被提为Android开发的一级语言,这着实让它火了一把。那时候绝大多数Android工程师可能都没有听说过这门语言,它有何德何能竟会受到Google的青睐?
当时,我和几个天天因Kotlin的特性而相互“口诛笔伐”的群友们聚到一起,考虑是否要写本书—大家也许需要这样一本书来了解Kotlin。不过,这本书因写作时间很长,耗尽了大家的热情,我们尚未定稿,国内其他Kotlin入门书已陆续面世。至于我负责的协程部分,从协程还是个“宝宝”开始,先后重写了三次,现在的Kotlin协程俨然是一位“大叔”了。
2019年,机械工业出版社的杨福川老师找到我,问我要不要写点什么。我想,Kotlin协程现在仍然是一个很大的麻烦,国内外都没有很好的资料,官方文档又过于精练,不太适合大家入门和进阶。于是就有了这本书。
Kotlin协程不像Python、JavaScript的async/await那样容易上手,后者似乎根本不需要明白什么是协程就能轻松使用。
我曾试着从Kotlin协程的标准库API开始讲—这样的好处是大家能够打好基础,结果大多数读者反馈这样不易学习。于是在“破解Kotlin协程”系列文章中,我从一开始就基于Kotlin项目组提供的协程框架开始介绍,并对比RxJava从实际问题切入,读者反映这可能是通俗易懂的协程文章了。不过很快,在介绍到调度器和挂起原理等内容的时候,读者就开始叫苦了,反馈说读起来如同天书一般。
当然,这其中也不乏感觉良好的读者,他们期望我能系统地对比一下Kotlin与其他语言的协程实现的异同,这说明这部分内容本身不是问题,问题可能是铺垫做得不足。于是我仔细分析了读者反馈的问题,发现多数问题源自大家对于协程概念理解的偏差。因此在本书中,我从一开始就紧紧抓住概念问题,从各个角度去阐释什么是协程,以及Kotlin协程与其他常见语言的协程在实现上有何区别。在探讨概念的时候,我尽可能用实际问题引入,逐步给出解决思路,由简入繁,将协程的设计思路和实现细节尽可能地呈现出来。
还有朋友建议我在文章中多提供一些图表以方便理解,为此我在本书中为所有关键节点提供了相应的状态图、时序图等,希望能够帮助读者轻松理解探讨的内容。
。
本书不会讲解Kotlin的基础语法,因此建议Kotlin初学者先阅读基础书,《Kotlin核心编程》就是一个不错的选择。你也可以访问https://coding.imooc.com/class/398.html参考我在慕课网发布的“Kotlin入门到精通”视频课程,视频中详细讲解了Kotlin的基础与进阶知识,其中的协程部分可以与本书配套学习。
Kotlin协程背后的知识点非常多,本书从异步程序的设计入手,探讨异步程序设计中要面对的关键问题,并在之后围绕这几个关键问题对Kotlin协程的设计实现展开探讨。
在剖析Kotlin协程的过程中,本书除介绍API的基本用法以外,还提供了使用Kotlin协程设计实现各类复合协程API的思路和方法,并抽象出一套系统的设计思路,通过CoroutineLite这个项目的设计实现,帮助大家深入了解官方协程框架的内部运行机制。
在帮助读者掌握Kotlin协程内部原理的同时,本书还从Android、Web应用和多平台等角度提供了实践思路,帮助读者做到在原理上深入浅出,在实战中融会贯通。
为了方便内容的展开,在探讨的过程中本书也对一些概念明确进行了定义和归纳,例如简单协程、复合协程、协程体等。
本书包含了丰富的示例,以便于读者阅读参考。
为提升读者的阅读体验,本书所有代码均采用JetBrains Mono字体,该字体由Kotlin项目团队所属公司JetBrains为开发者专门打造,更适合代码的阅读。
本书基于撰写时的Kotlin v1.3.61来讲解Kotlin协程的基本概念、实现原理和实践技巧。全书共9章,具体内容如下。
第1章主要从程序设计出发,结合实际问题引出异步程序的设计方案。异步程序的设计和实现是本书探讨的协程的基本应用场景,也是本书内容的基石。
第2章主要从协程本身切入,剖析协程是什么、有哪些类别,以及不同语言的协程实现有何种区别和联系等。这一章内容是理解Kotlin协程概念的前提。
第3章主要以Kotlin标准库的协程API为核心,阐述简单协程的使用方法和运行机制。简单协程是复合协程的基础,掌握这部分内容是理解协程工作机制的关键。
第4章主要介绍运用Kotlin协程的基础设施设计和实现复合协程的思路和方法,为后续对官方协程框架的学习和运用奠定基础。
第5章以官方协程框架为模板,介绍如何逐步实现其中的核心功能,以帮助读者了解其中的实现细节,并对复合协程的运行机制做到心中有数。这部分内容也是对前几章所述基础知识进行灵活运用的体现。
第6章介绍官方协程框架的运用,重点探讨了Channel、Flow、select的使用场景。至此,我们就已经掌握了将协程运用到实践中的基本技能。
第7章主要探讨协程在以Android为例的UI应用程序开发环境中面临的挑战和解决问题的方法,重点介绍了协程与Android生命周期的结合、协程与RxJava的互调用,以及Retrofit、Room等框架对协程的支持。
第8章主要探讨协程在Web服务开发场景中的运用,重点给出了基于Spring、Vert.x、Ktor这几个框架运用协程解决异步问题的方法和思路。
第9章主要介绍在除JVM以外的JavaScript和Native平台上,Kotlin协程的应用情况。
整体看来,第1~3章侧重于概念的介绍,第4章和第5章侧重于介绍如何将简单协程封装成复合协程,第6章介绍官方框架所提供的复合协程的使用方法,第7~9章侧重于实战运用。
建议对协程不了解的读者从前到后循序渐进地阅读本书。如果对协程有一定的认识,包括有在Lua、Go、JavaScript等语言中使用协程解决异步问题的经验,可以尝试从第6章开始阅读,在遇到不清楚的地方时再有目的地查阅前面的内容。如果想要快速体验协程的魅力,也可以直接从第7章开始挑选自己感兴趣的内容阅读,但全面了解协程的运行机制和原理仍然非常必要。
另外需要说明的是,本书在第2章介绍协程的概念时横向对比了几类典型的协程实现,在第4章中会使用Kotlin仿照这些协程的实现风格给出对应的复合协程实现,这其中涉及Lua、JavaScript、Go等语言,大家不需要对这些语言有更多的认识和了解,只需了解它们的实现形式即可。
这是一部从工作机制、实现原理、应用场景、使用方法、实践技巧、标准库、框架、应用案例等多个维度全面讲解Kotlin协程的专著,它同时提供了多语言视角,亦可通过本书了解其他语言的协程。
本书作者是腾讯的的高级工程师,是国内Kotlin领域的先驱者和布道者,不仅在工程实践领域积累了丰富的经验,而且在Kotlin开发者社群里有广泛的影响力和号召力。
:
毕业于北京邮电大学,现任腾讯地图数据采集研发中心团队移动客户端技术负责人。
资深Kotlin技术专家,国内知名的Kotlin开发者和布道师。
2016年10月创建微信公众号Kotlin,持续发布Kotlin相关的文章和教学视频,颇受欢迎。
2017年初开始参与Kotlin中文相关网站的翻译和维护至今。
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.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.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.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.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
【现货速发】深入理解Bootstrap
全新天津
¥ 36.20
【现货速发】深入理解FFmpeg
全新天津
¥ 82.00
【现货速发】深入理解JAVA并发
全新天津
¥ 43.70
【现货速发】深入理解ES6
全新天津
¥ 52.90
【现货速发】深入理解LINUX内核
全新天津
¥ 42.50
【现货速发】深入理解ApacheDubbo与实战
全新天津
¥ 41.50
【现货速发】深入理解 Altera FPGA 应用设计(1401)
全新天津
¥ 37.40
现货速发 深入理解Java并发9787522612669 文墨书籍
全新北京
¥ 58.70
【现货速发】深入地心
全新天津
¥ 37.70
【现货速发】深入理解计算机网络
全新天津
¥ 56.70
— 没有更多了 —
以下为对购买帮助不大的评价