Kotlin核心编程

水滴技术团队

科技

编程

2019-4-15

机械工业出版社

目录
前言
热身篇 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
【展开】
内容简介

本书不是一本简单介绍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响应式框架和编程等内容。

【展开】
下载说明

1、追日是作者栎年创作的原创作品,下载链接均为网友上传的的网盘链接!

2、相识电子书提供优质免费的txt、pdf等下载链接,所有电子书均为完整版!

下载链接
热门评论
  • 蹦恰恰的评论
    当前唯一一本值得读的国内原创Kotlin书籍。有几处排印错误(大小写,中英文问号,以及p56 中间一段代码没有格式化,p211 注解介绍时格式缩进 大小写 拼写不完整 等编辑问题)。
  • 刘浏的评论
    jetbrains 除了孕育了idea,在这之前还开发了resharper。Kotlin是个代价很低的选择。不错
  • 文刀的评论
    之前草草看了一遍,只学会了一些语法。现在又看了一遍,学会了一些思想
  • smilevchy的评论
    比一般入门书讲得更深,同时介绍的一些方案设计拓宽了视野。
  • 扬州慢的评论
    写 kotlin 的中文书籍不多的,这本算是看过的还不错的书。文中不乏将 kotlin 与 java、scala,甚至 c++ 等语言的比较,对一些平时可能较少接触到的概念例如元编程、代数等思想也有所提及。
  • FuqiangWang的评论
    我的读后感, https://mp.weixin.qq.com/s/-9CPUXAFzBXW02NJX62oeg ,怎么实现我不管? 本来就是!
  • Jae的评论
    kotlin是更好的java,是不完全函数式,是更优秀但也有着妥协。 通过kotlin实例与源码和java比较,和scala比较,来慢慢演进一个语法的实现与原理。 后半截的元编程,设计模式,函数式编程,异步非阻塞,讲得非常精彩。 推荐。
  • Goooler的评论
    好书,kotlin 中文网首荐,入门必备
  • lydia的评论
    前面几章讲了许多基础但核心的知识点,后面几章对Kotlin的高级特性进行了深入剖析,感觉这本书把各个阶层的读者都照顾到了
  • 王见现的评论
    一直在关注水滴技术团队的博客,博客里分享了很多优质内容。这次他们写的书一定要来一本。