新书速递
导读:Kotlin诞生于2011年,开源于2012年,吸收了Java等语言的优良特性,提供了令人惊艳的编程体验,是编程语言界名副其实的“后浪”。
欢迎来到Kotlin的世界!
Kotlin是2011年由JetBrains推出的新一代编程语言。最初基于JVM,如今已向Native、JavaScript、数据科学等多个领域迈进。Kotlin是一种广泛的通用语言。你可以在任何原先使用Java的地方以及其他更多场景中使用它。
根据2020年2月JVM Ecosystem的数据,在JVM上Kotlin的份额已经仅次于Java,位居第二。2017年Google官方宣布Kotlin为Android的开发语言后,Kotlin的发展势头更为迅速,已成为编程语言界的又一颗新星,在业界得到了广泛的关注。
如今Kotlin已经足够成熟,众多Android开发者迫切需要一本入门级的Kotlin编程书籍,以顺利从Java过渡到Kotlin。
《Kotlin编程实践》通俗易懂,作者从向你展示如何安装Kotlin以及为你的项目配置它讲起,教会你如何在Java环境、浏览器中或作为一个独立的应用程序来运行Kotlin。用大量简单的示例程序清晰地解释了Kotlin的语法、数据结构、函数式编程等主要特性,是对Kotlin初学者非常有帮助的一本工具书。
Kotlin的版本迭代非常迅速,相关的书籍、文章和教程很容易就会被打上“过时”的标记。本书基于Kotlin持续时间长、语法特性非常成熟的1.3版本编写,除了版本够新之外,内容的组织方式也非常讲究,采用了抛出问题、回答问题的方式,既适合新手入门通读,也适合老手作为资料重点翻阅。相比之下,本书对初学者更为友好,负责翻译本书的禹昂更是Kotlin中文官网的主要翻译贡献者之一,所有的概念和术语都完全依照中文官网的翻译标准进行推敲,相信大家的阅读体验会如同查阅中文官网一般。
本书将带给你直接而实用的帮助,可以指导你在Kotlin旅途中快速进步。本书是Kotlin必不可少的操作指南,每个开发者都应将其放在案头,以支持日常工作。
主要内容
本书分为13章,每一章都是独立的,但本书引用了许多其他资料。你可以按任意喜欢的顺序阅读本书。
第1章讲解了安装并运行Kotlin的基本过程,包括使用REPL,使用诸如Maven以及Gradle等构建工具,以及在Graal中使用原生镜像生成器。
第2章讲解了Kotlin的基本特性—例如可空类型、操作符重载以及类型转换,然后介绍了一些更深奥的问题,包括按位移位操作符或者在Pair类上编写扩展函数等。
第3章重点介绍了Kotlin的面向对象特性,而该部分内容可能会让其他语言的开发者对此感到惊讶或不明所以。它包含如何使用const关键字、Kotlin如何处理幕后属性、延迟初始化以及令人恐惧的Nothing类,这些内容一定会令现有的Java开发者感到困惑。
第4章只有很少的一部分内容,其中涵盖一些需要被解释说明的函数式特性。函数式编程概念会始终贯穿全书,特别是当我们谈论集合、序列以及协程时,但该章中包含的一些有用的技巧可能会让你感觉到不同寻常或非常有趣。
第5章介绍了数组与集合,主要介绍一些不那么为人所知的方法,例如集合解构、按多个属性排序、在集合上构建窗口,以及创建数列。
第6章展示了Kotlin如何惰性处理序列中的元素,类似于在Java中使用流的方式,内容包含生成序列、在序列中生产元素以及使用无限序列。
第7章涵盖了Kotlin独有的另一个主题:在对象的上下文中执行代码块的函数。诸如let、apply以及also这类函数在Kotlin中非常有用,该章会说明为什么以及如何使用它们。
第8章讨论了Kotlin中的一个便捷特性:如何实现委托。委托可以让你使用组合而不是继承,Kotlin的标准库包含了一系列的委托,例如lazy、observable以及vetoable。
第9章涵盖了有关测试的重要主题,将会重点关注JUnit5。在当前版本下,JUnit已经被设计为可以与Kotlin良好地配合使用,其中包括常规用法以及在Spring框架应用程序中使用。该章会讨论使编写与执行测试更加容易的几种方式。
第10章涵盖了一些专门用于资源管理的方法,包括文件I/O,以及在多种情况下具有广泛适用性的use函数。
第11章介绍了其他类别的书中不容易找到的主题。诸如如何获取当前Kotlin版本,如何强制when语句在即使没有返回值的时候也要覆盖所有情况,以及如何在正则表达式中使用replace函数。此外,也讨论了TODO函数和Random类,以及如何与Java异常处理集成。
第12章涉及对Kotlin非常友好的Spring框架与Spring Boot,少量内容展示了如何将Kotlin类作为托管的bean、如何实现JPA持久性,以及如何在需要的时候进行依赖注入。
第13章介绍协程。协程是Kotlin中最受欢迎的功能之一,也是这门语言并发与并行编程的基础,内容包含基础知识,例如构建器与调度器、如何取消与调试协程,以及如何在自定义的Java线程池中运行它们。
这13章的内容不需要按特定顺序阅读。它们相辅相成,你可以从任何地方开始阅读。章节分组提供了一种将相似内容放在一起的方式,但是我们还是希望你可以在各章节之间自由跳跃从而解决你当前可能遇到的任何问题。
通过阅读本书,你将:
- 掌握函数式编程概念,包括 lambda 表达式、序列和并发。
- 学习如何使用委托、延迟初始化和作用域函数。
- 学习 Kotlin 与 Java 互操作的能力并使用 Kotlin 访问Java 库。
- 能够编写扩展函数。
- 能够使用诸如 JUnit5 之类的实用库。
- 在特定的开发框架(例如 Android 和 Spring)内获得实践经验。
作者简介
Ken Kousen是Java Champion、Oracle Groundbreaker Ambassador与JavaOne Rock Star三个奖项的获得者。Ken在他自己的公司 Kousen IT开发软件并教授软件开发课程。同时也是JetBrains官方认证的Kotlin培训合作伙伴。
译者简介
乔禹昂,携程机票移动端高级工程师,长期在工作中将 Kotlin 用于实践,Kotlin界的优秀“后浪”。Kotlin 中文社区成员,官方文档译者。主要负责翻译协程、Native 部分的多篇官方文档,曾担任北京 GDG/Kotlin Everywhere 大会讲师,分享了《Kotlin 函数式编程》的主题。对 Kotlin Native、Kotlin Multiplaform 等实验性新技术也颇有研究。
目录
●第1章 安装并运行Kotlin11
1.1 在没有本地编译器的情况下运行Kotlin11
1.2 在本地安装Kotlin13
1.3 在命令行中编译并运行Kotlin15
1.4 使用Kotlin REPL16
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编译Kotlin27
●第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与setter56
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 在算法中使用fold79
4.2 使用reduce函数进行归约82
4.3 使用尾递归84
●第5章 集合89
5.1 使用数组89
5.2 创建集合92
5.3 为已存在的集合创建只读视图94
5.4 从集合构建map96
5.5 当集合为空的时候返回默认值97
5.6 将变量限制在给定区间98
5.7 处理集合中的窗口100
5.8 解构list102
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函数与Elvis126
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/await207
13.3 使用协程调度器208
13.4 在Java线程池上运行协程210
13.5 取消协程213
13.6 协程调试216
上下滑动查看
本书没有专门针对Android的章节,相反,将全面讨论Kotlin在Android中的应用。一些与Android有关的特定内容(例如协程的取消),利用了Android库广泛使用Kotlin的事实,但一般来说,本书涵盖的语言特性可以在任何地方使用。本书希望以一种更通用的方式覆盖这门语言,使Android开发者能学到在开发任何项目时都有用的技巧。