具体描述
本书不是一本简单介绍Kotlin语法应用的图书,而是一部专注于帮助读者深入理解Kotlin的设计理念,指导读者实现Kotlin高层次开发的实战型著作。书中深入介绍了Kotlin的核心语言特性、设计模式、函数式编程、异步开发等内容,并以Android和Web两个平台为背景,演示了Kotlin的实战应用。
全书共13章,分为4个部分:
热身篇—Kotlin基础(第1~2章),简单介绍了Kotlin设计哲学、生态及基础语法,其中包括Kotlin与Scala、Java之间的关联与对比,以及Kotlin的类型声明的特殊性、val和var的使用、高阶函数的使用、面向表达式编程的使用、字符串的定义与操作等内容;
下水篇—Kotlin核心(第3~8章),深入介绍了面向对象、代数数据类型、模式匹配、类型系统、Lambda、集合、多态、扩展、元编程等Kotlin开发核心知识,这是本书的重点,其中涉及很多开发者特别关心的问题,比如多继承问题、模式匹配问题、用代数数据类型抽象业务问题、泛型问题、反射问题等。
潜入篇—Kotlin探索(第9~11章),探索Kotlin在设计模式、函数式编程、异步和并发等编程领域的应用,其中包括对4大类设计模式、Typeclass实现、函数式通用结构设计、类型替代异常处理、共享资源控制、CQRS架构等重点内容的深入剖析;
遨游篇—Kotlin实战(第12~13章),着重演示了Kotlin在Android和Web平台的实战案例,其中涉及架构方式、单向数据流模型、解耦视图导航、响应式编程、Spring 5响应式框架和编程等内容。
作者简介
水滴技术团队 著:水滴技术团队
核心成员来自阿里巴巴、淘宝,公司旗下的大数据SaaS类产品服务了Booking、阿里集团、小米集团、大疆创新、拍拍贷等几十万家企业,是微信的重点第三方合作产品。
推崇函数式编程,喜欢尝试各种新的前后端技术。团队在2015年就实现了业界领先的全异步开发架构,该架构是基于fp Scala及微服务化的分布式系统。同时,水滴技术团队还是国内外少有的pure fp技术团队,采用了如Play! Framework、Akka、Cats等新潮的技术,并对JVM生态的一些编程语言有着较丰富的实战经验,当前主要为Scala、Kotlin社区输出博客和开源项目。
章建良(网名:Jilen)
水滴技术团队核心成员,杭州极跑科技联合创始人,曾就职于淘宝。从2008年开始,活跃于Scala社区,在函数式编程和并发领域拥有极丰富的实战经验。
此外,他还是知名开源项目Quill的核心贡献者,目前正在创造一个纯函数式的异步数据库驱动asyncdb。
目录信息
热身篇 Kotlin基础
第1章 认识Kotlin2
1.1 Java的发展2
1.1.1 Java 8的探索3
1.1.2 Java未来的样子3
1.2 Scala的百宝箱3
1.2.1 学术和工业的平衡4
1.2.2 复合但不复杂4
1.2.3 简单却不容易5
1.3 Kotlin—改良的Java5
1.3.1 Kotlin的实用主义6
1.3.2 更好的Java6
1.3.3 强大的生态8
1.4 本章小结8
第2章 基础语法10
2.1 不一样的类型声明10
2.1.1 增强的类型推导11
2.1.2 声明函数返回值类型11
2.2 val和var的使用规则13
2.2.1 val的含义:引用不可变13
2.2.2 优先使用val来避免副作用14
2.2.3 var的适用场景15
2.3 高阶函数和Lambda16
2.3.1 抽象和高阶函数17
2.3.2 实例:函数作为参数的需求17
2.3.3 函数的类型19
2.3.4 方法和成员引用21
2.3.5 匿名函数22
2.3.6 Lambda是语法糖22
2.3.7 函数、Lambda和闭包25
2.3.8 “柯里化”风格、扩展函数26
2.4 面向表达式编程29
2.4.1 表达式比语句更安全30
2.4.2 Unit类型:让函数调用皆为表达式32
2.4.3 复合表达式:更好的表达力33
2.4.4 枚举类和when表达式34
2.4.5 for循环和范围表达式37
2.4.6 中缀表达式39
2.5 字符串的定义和操作41
2.5.1 定义原生字符串41
2.5.2 字符串模板42
2.5.3 字符串判等43
2.6 本章小结43
下水篇 Kotlin核心
第3章 面向对象46
3.1 类和构造方法46
3.1.1 Kotlin中的类及接口46
3.1.2 更简洁地构造类的对象49
3.1.3 主从构造方法55
3.2 不同的访问控制原则56
3.2.1 限制修饰符57
3.2.2 可见性修饰符61
3.3 解决多继承问题64
3.3.1 骡子的多继承困惑64
3.3.2 接口实现多继承65
3.3.3 内部类解决多继承问题的方案67
3.3.4 使用委托代替多继承69
3.4 真正的数据类71
3.4.1 烦琐的JavaBean 71
3.4.2 用data class创建数据类 73
3.4.3 copy、componentN与解构75
3.4.4 数据类的约定与使用78
3.5 从static到object79
3.5.1 什么是伴生对象79
3.5.2 天生的单例:object81
3.5.3 object表达式82
3.6 本章小结84
第4章 代数数据类型和模式匹配85
4.1 代数数据类型85
4.1.1 从代数到类型86
4.1.2 计数87
4.1.3 积类型87
4.1.4 和类型与密封类88
4.1.5 构造代数数据类型89
4.2 模式匹配90
4.2.1 何为模式91
4.2.2 常见的模式92
4.2.3 处理嵌套表达式93
4.2.4 通过Scala找点灵感95
4.2.5 用when力挽狂澜97
4.3 增强 Kotlin 的模式匹配99
4.3.1 类型测试/类型转换99
4.3.2 面向对象的分解100
4.3.3 访问者设计模式102
4.3.4 总结104
4.4 用代数数据类型来抽象业务105
4.4.1 从一个实际需求入手105
4.4.2 糟糕的设计105
4.4.3 利用ADT106
4.4.4 更高层次的抽象108
4.5 本章总结110
第5章 类型系统112
5.1 null引用:10亿美元的错误112
5.1.1 null做了哪些恶112
5.1.2 如何解决NPE问题114
5.2 可空类型115
5.2.1 Java 8中的Optional115
5.2.2 Kotlin的可空类型118
5.2.3 类型检查121
5.2.4 类型智能转换122
5.3 比Java更面向对象的设计124
5.3.1 Any:非空类型的根类型124
5.3.2 Any?:所有类型的根类型127
5.3.3 Nothing与Nothing?128
5.3.4 自动装箱与拆箱128
5.3.5 “新”的数组类型129
5.4 泛型:让类型更加安全130
5.4.1 泛型:类型安全的利刃130
5.4.2 如何在Kotlin中使用泛型131
5.4.3 类型约束:设定类型上界133
5.5 泛型的背后:类型擦除135
5.5.1 Java为什么无法声明一个泛型数组135
5.5.2 向后兼容的罪136
5.5.3 类型擦除的矛盾138
5.5.4 使用内联函数获取泛型139
5.6 打破泛型不变140
5.6.1 为什么List不能赋值给List140
5.6.2 一个支持协变的List141
5.6.3 一个支持逆变的Comparator143
5.6.4 协变和逆变144
5.7 本章小结147
第6章 Lambda和集合148
6.1 Lambda简化表达148
6.1.1 调用Java的函数式接口148
6.1.2 带接收者的Lambda149
6.1.3 with和apply150
6.2 集合的高阶函数API151
6.2.1 以简驭繁:map151
6.2.2 对集合进行筛选:filter、count152
6.2.3 别样的求和方式:sumBy、sum、fold、reduce154
6.2.4 根据学生性别进行分组:groupBy156
6.2.5 扁平化—处理嵌套集合:flatMap、flatten157
6.3 集合库的设计159
6.3.1 集合的继承关系159
6.3.2 可变集合与只读集合160
6.4 惰性集合163
6.4.1 通过序列提高效率163
6.4.2 序列的操作方式164
6.4.3 序列可以是无限的166
6.4.4 序列与Java 8 Stream对比166
6.5 内联函数167
6.5.1 优化Lambda开销168
6.5.2 内联函数具体语法169
6.5.3 noinline:避免参数被内联171
6.5.4 非局部返回172
6.5.5 crossinline174
6.5.6 具体化参数类型174
6.6 本章小结175
第7章 多态和扩展176
7.1 多态的不同方式176
7.1.1 子类型多态176
7.1.2 参数多态177
7.1.3 对第三方类进行扩展178
7.1.4 特设多态与运算符重载178
7.2 扩展:为别的类添加方法、属性179
7.2.1 扩展与开放封闭原则179
7.2.2 使用扩展函数、属性180
7.2.3 扩展的特殊情况183
7.2.4 标准库中的扩展函数:run、let、also、takeIf186
7.3 Android中的扩展应用188
7.3.1 优化Snackbar188
7.3.2 用扩展函数封装Utils189
7.3.3 解决烦人的findViewById190
7.4 扩展不是万能的193
7.4.1 调度方式对扩展函数的影响193
7.4.2 被滥用的扩展函数196
7.5 本章小结197
第8章 元编程198
8.1 程序和数据199
8.1.1 什么是元编程199
8.1.2 常见的元编程技术201
8.2 Kotlin的反射202
8.2.1 Kotlin和Java反射202
8.2.2 Kotlin的KClass205
8.2.3 Kotlin的KCallable206
8.2.4 获取参数信息208
8.3 Kotlin的注解210
8.3.1 无处不在的注解211
8.3.2 精确控制注解的位置212
8.3.3 获取注解信息213
8.4 本章小结216
潜入篇 Kotlin探索
第9章 设计模式218
9.1 创建型模式218
9.1.1 伴生对象增强工厂模式219
9.1.2 内联函数简化抽象工厂222
9.1.3 用具名可选参数而不是构建者模式224
9.2 行为型模式228
9.2.1 Kotlin中的观察者模式228
9.2.2 高阶函数简化策略模式、模板方法模式231
9.2.3 运算符重载和迭代器模式235
9.2.4 用偏函数实现责任链模式237
9.2.5 ADT实现状态模式241
9.3 结构型模式244
9.3.1 装饰者模式:用类委托减少样板代码245
9.3.2 通过扩展代替装饰者246
9.4 本章小结248
第10章 函数式编程249
10.1 函数式编程的特征249
10.1.1 函数式语言之争250
10.1.2 纯函数与引用透明性251
10.1.3 代换模型与惰性求值253
10.2 实现Typeclass254
10.2.1 高阶类型:用类型构造新类型255
10.2.2 高阶类型和Typeclass256
10.2.3 用扩展方法实现Typeclass257
10.2.4 Typeclass设计常见功能258
10.3 函数式通用结构设计262
10.3.1 Monoid262
10.3.2 Monad264
10.3.3 Monad组合副作用269
10.4 类型代替异常处理错误271
10.4.1 Option与OptionT272
10.4.2 Either与EitherT276
10.5 本章小结279
第11章 异步和并发281
11.1 同步到异步281
11.1.1 同步与阻塞的代价281
11.1.2 利用异步非阻塞来提高效率284
11.1.3 回调地狱284
11.2 Kotlin的Coroutine286
11.2.1 多线程一定优于单线程吗287
11.2.2 协程:一个更轻量级的“线程”287
11.2.3 合理地使用协程288
11.2.4 用同步方式写异步代码290
11.3 共享资源控制293
11.3.1 锁模式293
11.3.2 Actor:有状态的并行计算单元296
11.4 CQRS架构302
11.4.1 Event Sourcing事件溯源—记录对象操作轨迹302
11.4.2 Kotlin with Akka Persistence-Actor304
11.5 本章小结310
遨游篇 Kotlin实战
第12章 基于Kotlin的Android架构314
12.1 架构方式的演变314
12.1.1 经典的 MVC 问题315
12.1.2 MVP316
12.1.3 MVVM320
12.2 单向数据流模型327
12.2.1 Redux327
12.2.2 单向数据流的优势329
12.3 ReKotlin331
12.3.1 初见 ReKotlin331
12.3.2 创建基于ReKotlin的项目332
12.4 解耦视图导航341
12.4.1 传统导航的问题341
12.4.2 rekotlin-router342
12.5 本章小结343
第13章 开发响应式Web应用345
13.1 响应式编程的关键:非阻塞异步编程模型345
13.1.1 使用CompletableFuture实现异步非阻塞346
13.1.2 使用RxKotlin进行响应式编程347
13.1.3 响应式Web编程框架348
13.2 Spring 5:响应式Web框架349
13.2.1 支持响应式编程349
13.2.2 适配Kotlin350
13.2.3 函数式路由351
13.2.4 异步数据库驱动353
13.3 Spring 5响应式编程实战354
13.4 本章小结360
· · · · · · (收起)
读后感
本文链接:https://blog.csdn.net/Agg_bin/article/details/104375560 《Kotlin核心编程》是水滴技术团队2019-4-15出版的,也不知道为啥这么火,网上搜Kotlin学习文档、书籍,除了Kotlin官方文档,其他大家极力推荐的就是此书了,读完以后才知道为什么。 首先,我是19年8月份入...
本文链接:https://blog.csdn.net/Agg_bin/article/details/104375560 《Kotlin核心编程》是水滴技术团队2019-4-15出版的,也不知道为啥这么火,网上搜Kotlin学习文档、书籍,除了Kotlin官方文档,其他大家极力推荐的就是此书了,读完以后才知道为什么。 首先,我是19年8月份入...
本文链接:https://blog.csdn.net/Agg_bin/article/details/104375560 《Kotlin核心编程》是水滴技术团队2019-4-15出版的,也不知道为啥这么火,网上搜Kotlin学习文档、书籍,除了Kotlin官方文档,其他大家极力推荐的就是此书了,读完以后才知道为什么。 首先,我是19年8月份入...
本文链接:https://blog.csdn.net/Agg_bin/article/details/104375560 《Kotlin核心编程》是水滴技术团队2019-4-15出版的,也不知道为啥这么火,网上搜Kotlin学习文档、书籍,除了Kotlin官方文档,其他大家极力推荐的就是此书了,读完以后才知道为什么。 首先,我是19年8月份入...
本文链接:https://blog.csdn.net/Agg_bin/article/details/104375560 《Kotlin核心编程》是水滴技术团队2019-4-15出版的,也不知道为啥这么火,网上搜Kotlin学习文档、书籍,除了Kotlin官方文档,其他大家极力推荐的就是此书了,读完以后才知道为什么。 首先,我是19年8月份入...
用户评价
我是一名在游戏开发行业摸爬滚打多年的老兵,一直以来都是C++的忠实拥趸。但随着技术的发展,我发现很多新的框架和库都开始转向使用像Kotlin这样的语言。在朋友的推荐下,我拿起了《Kotlin核心编程》,想看看它到底有什么魅力。 刚开始读这本书的时候,我并没有抱太大的期望,毕竟已经习惯了C++那种“硬核”的编程风格。但是,随着阅读的深入,我渐渐被Kotlin的简洁和表达力所折服。书中关于属性(Properties)的讲解,让我眼前一亮。不用再写getter和setter方法,直接通过点号就可以访问和修改属性,这简直是太方便了! 另外,书中对于Kotlin的lambda表达式和高阶函数的讲解,也让我对函数式编程有了更深刻的理解。我发现,通过这些特性,可以非常方便地编写出简洁、可读性强的代码,尤其是在处理集合数据时,效率提升非常明显。书中还提到了Kotlin的扩展函数,这让我可以为已有的类添加新的方法,而无需修改其源代码,这对于重构旧代码非常有帮助。 这本书的另一个亮点在于它对Kotlin的元编程(Metaprogramming)能力的介绍,虽然这部分内容相对深入,但作者的讲解非常清晰,让我能够理解Kotlin在编译时和运行时的一些高级特性。这对于我这样有底层开发经验的人来说,是非常有吸引力的。 总的来说,《Kotlin核心编程》这本书对于我这样从C++转过来的开发者来说,是一个非常好的学习平台。它不仅让我快速掌握了Kotlin的语法和特性,更重要的是,它让我看到了现代编程语言的演进方向,以及如何用更高效、更简洁的方式来解决复杂的编程问题。我非常推荐这本书给所有希望拓宽技术视野的开发者!
这本《Kotlin核心编程》真是太棒了!我一直对Android开发很感兴趣,但Java实在让我有些头疼,各种样板代码和空指针异常层出不穷。偶然的机会,我听说了Kotlin,并且被它简洁、现代的语法深深吸引。于是,我毫不犹豫地选择了这本书作为我的入门读物。 我最喜欢这本书的地方在于,它并不是简单地罗列Kotlin的语法特性,而是真正从开发者的角度出发,讲解如何利用Kotlin的强大之处来解决实际问题。例如,书中关于协程的部分,讲解得非常透彻,不仅说明了协程的原理,还提供了大量实用的案例,让我能够轻松理解如何在Android应用中实现异步编程,摆脱了回调地狱的困扰。此外,对于DSL(领域特定语言)的介绍也让我大开眼界,原来Kotlin的语法可以如此灵活,可以用来构建如此优雅的代码。 我特别欣赏作者在讲解数据类(Data Classes)时所用的比喻,它让我立刻明白了数据类存在的意义和便利性。不用再手动编写equals()、hashCode()、toString()等方法,这不仅节省了大量时间,还大大降低了出错的可能性。而且,书中关于扩展函数(Extension Functions)的讲解也让我受益匪浅,它允许我在不修改原有类的情况下为其添加新的功能,这对于维护和重构遗留代码非常有帮助。 这本书的另一个亮点是它对Kotlin与Java互操作性的深入探讨。对于许多已经有Java基础的开发者来说,这无疑是一个巨大的福音。书中详细讲解了如何调用Java代码,以及如何在Kotlin中编写可以被Java调用的代码,这让我的迁移过程变得异常顺畅。我不再需要担心学习Kotlin会让我失去与现有Java项目的兼容性。 总而言之,《Kotlin核心编程》是一本不可多得的优秀技术书籍。它不仅内容翔实,案例丰富,而且讲解方式深入浅出,非常适合各个层次的Kotlin学习者。我强烈推荐这本书给所有想要掌握Kotlin、提升开发效率的开发者!
作为一个对新技术充满好奇心的开发者,我对《Kotlin核心编程》这本书的评价是:惊喜连连,受益匪浅!我之所以选择这本书,是因为我听说了Kotlin在现代软件开发中的广泛应用,尤其是在Android和后端开发领域。 这本书的结构安排得非常合理。开篇就点明了Kotlin的几个核心优势,例如它的简洁性、安全性和互操作性。接着,书中详细介绍了Kotlin的基础语法,包括变量声明、数据类型、控制流等,这些内容对于初学者来说非常友好。我特别喜欢作者讲解`when`表达式的部分,它比Java的`switch`语句更加强大和灵活,用起来非常顺手。 更令我惊喜的是,书中对Kotlin的一些高级特性的讲解。比如,它深入剖析了`sealed`类,让我理解了如何用它来构建具有固定集合的类层次结构,这在处理枚举类型和状态模式时非常有用。此外,书中还探讨了Kotlin的委托(Delegation)模式,这是一个非常强大的概念,可以用来实现代码复用和组合,避免了继承的复杂性。 这本书还提供了许多实际的代码示例,这些示例都来自于真实的项目开发场景,让我在学习理论知识的同时,也能立刻看到实际应用的效果。例如,书中关于Kotlin Coroutines的章节,详细演示了如何在Android应用中实现非阻塞的并发操作,这对于提升应用的响应速度和用户体验至关重要。 总而言之,《Kotlin核心编程》这本书内容扎实,讲解深入,实践性强。它不仅帮助我全面掌握了Kotlin的各项知识,更重要的是,它拓宽了我的编程思路,让我能够以更优雅、更高效的方式来解决问题。我强烈推荐这本书给所有渴望提升自己技术能力的开发者!
我是一名在企业从事了多年Java开发的工程师,最近公司开始推广使用Kotlin。说实话,一开始我对学习一门新语言有些抵触,毕竟Java已经非常熟悉了。但这本书《Kotlin核心编程》彻底改变了我的看法。 书中的逻辑非常严谨,从基础的语法特性开始,一步步深入到更高级的概念。我尤其对书中关于类型系统的讲解印象深刻。Kotlin的空安全(Null Safety)设计,让我摆脱了Java中无处不在的`NullPointerException`的恐惧。书中通过各种生动的例子,清晰地展示了如何利用可空类型和非空类型来写出更健壮的代码。 另外,书中关于函数式编程的介绍也让我耳目一新。`map`、`filter`、`reduce`等高阶函数的使用,让我的代码变得更加简洁和富有表达力。我发现,通过合理地运用这些函数,可以极大地减少循环和条件判断,让代码更容易阅读和维护。 对于我这样有Java背景的开发者来说,这本书的过渡非常自然。书中并没有回避与Java的对比,而是巧妙地将Kotlin的优势与Java的痛点相结合,让我能够更快地理解Kotlin的价值所在。例如,关于Kotlin的lambda表达式,书中的讲解比我之前看过的任何资料都要清晰易懂。 总的来说,这本书不仅教会了我Kotlin的语法,更重要的是,它帮助我理解了Kotlin的设计理念,以及如何用一种更现代、更高效的方式来编写代码。如果你和我一样,是一名有一定编程基础的开发者,并且正在考虑学习Kotlin,那么这本书绝对是你的不二之选。
我是一名初入编程世界的学生,一直以来都对软件开发充满了热情。《Kotlin核心编程》这本书,是我学习Kotlin的第一个启蒙老师。 这本书的语言非常通俗易懂,即使是没有太多编程经验的初学者,也能轻松理解。作者用了很多贴近生活的比喻,来解释一些抽象的概念,比如数据类,作者就把它比作一个“小巧的记事本”,立刻就明白了它的作用。 我最喜欢书中关于函数和类讲解的部分。通过很多小例子,我学会了如何定义函数,如何传递参数,以及如何创建自己的类。书中还讲到了面向对象编程的一些基本原则,比如封装、继承和多态,这些概念通过Kotlin的语法来实现,比我想象的要容易得多。 尤其令我惊喜的是,书中还讲解了Kotlin的智能类型转换(Smart Casts)。我以前觉得类型转换很麻烦,容易出错,但是Kotlin的智能类型转换功能,可以在一定条件下自动进行类型转换,大大降低了出错的概率,让我写代码的时候更加安心。 这本书还提供了很多练习题,让我能够巩固所学知识。通过做练习题,我能够更好地理解Kotlin的语法,并且学会如何应用这些知识来解决实际问题。 总的来说,《Kotlin核心编程》这本书是我学习Kotlin的绝佳入门教材。它不仅内容丰富,讲解清晰,而且非常贴合初学者的需求。我非常感谢这本书,它为我打开了Kotlin的大门,让我对编程充满了更多的信心和期待!
好书,kotlin 中文网首荐,入门必备
前面几章讲了许多基础但核心的知识点,后面几章对Kotlin的高级特性进行了深入剖析,感觉这本书把各个阶层的读者都照顾到了
前面几章讲了许多基础但核心的知识点,后面几章对Kotlin的高级特性进行了深入剖析,感觉这本书把各个阶层的读者都照顾到了
我的读后感, https://mp.weixin.qq.com/s/-9CPUXAFzBXW02NJX62oeg ,怎么实现我不管? 本来就是!
好书,kotlin 中文网首荐,入门必备