前言

Kotlin是一门务实的语言。Kotlin从发展之初就受到各种语言(例如Java、C#、JavaScript、Scala、Groovy、Python等)的影响,或者说Kotlin集各家语言之长,吸收了各种语言比较好的特性。在JVM环境下,Kotlin被设计成可以和Java代码相互操作,并可以重复使用Java现有函数库和框架的语言。

在2016年年底,笔者工作之余,开始研究Kotlin这门语言。顺便尝试使用Kotlin编写一些Android上的组件。

随后,在2017-2018年,笔者负责的移动端团队开始尝试使用Kotlin编写全新的App。此时恰逢谷歌宣布使用Kotlin作为Android的官方语言,这更加坚定了我们使用Kotlin的决心。个人也在此期间尝试使用Kotlin来编写服务端的程序。到了2019年年初,笔者跳槽到了万物新生(当时还是爱回收)的创新中心。在这里,我们服务端的主力语言就是Kotlin。使用Kotlin编写后端服务在当时甚至到现在都是一件比较酷的事情。

这些年来,笔者在两家公司使用Kotlin做了很多项目,从App到桌面程序再到服务端程序,积累了很多相关的编程经验。因此编写了本书,希望通过本书能让读者了解这门务实的语言,以及尝试使用这门语言。Kotlin也是基于JVM的语言,上手不难,但是其思想跟Java大相径庭。

每隔几年,我们都会听到一种声音“xxx语言将会取代Java”,取代Java的语言也从之前的C#、PHP、Python变成了Go、Kotlin。其实,只要从TIOBE的榜单就可以看到,这些年来Java一直占据着这份榜单前三的位置,甚至很多年来都是第一。Java庞大的生态系统、海量的项目决定了其在未来很多年内不可能被取代。

题外话,在下一代的Java虚拟机Graal VM中,除了支持基于JVM的语言Java、Scala、Groovy、Kotlin等外,还支持JavaScript、Python、Ruby、R,以及基于LLVM的C、C++、Rust。Graal VM会让Java变得更加强大。

Kotlin的出现是为了编写更好的Java,Kotlin可以与Java进行互操作,并且Kotlin有自己独特的优势:

· 丰富的语法糖

· 强类型

· 函数式编程

· 协程

……

因此,Kotlin也被戏称为Java最好的第三方库。

本书详细介绍了Kotlin语言的各种特性,例如花了大量篇幅介绍各种类型的函数,贯彻本书始终的Lambda表达式,有别于Java的委托、泛型,灵活、简洁的DSL,常用的语法糖,相比线程更加轻量级的协程,参考RxJava实现的Flow,等等。

本书不仅介绍Kotlin的功能,还会对部分Kotlin特性进行源码解析,也会对各个特性进行深入的总结。

另外,本书带来了丰富的案例,涉及移动端、服务端甚至桌面端。它们都是笔者在大量使用Kotlin之后的实践和心得,同时包含很多笔者封装的library,供读者参考、借鉴和使用。因此,本书主要面向移动端、服务端的读者。

本书编写的时间跨度有一点长,历经了Kotlin 1.3到当前的Kotlin 1.5。现在Kotlin已经变成笔者的主力编程语言。当然,Kotlin的研发团队也在不断更新,据说每隔6个月会发布一个新版本,有点类似Java发布新版本的节奏。笔者也会不断跟进Kotlin新版本的特性。

总之,本书尽量多地介绍Kotlin方方面面的特性,用丰富的例子来增强说服力。本书共18章,其中第10、13、14、15(部分内容)、17(部分内容)章是由易庞宙编写的,其余是由沈哲编写的。本书的资源在GitHub中,地址为https://github.com/fengzhizi715/Advance-Kotlin-Tutorials。

当然,在编写本书的过程中,Kotlin也在不断地更新、完善。另外,笔者才疏学浅,书中难免会有不当之处,欢迎读者批评指正,一起讨论Kotlin的方方面面。

最后,写书是一个枯燥、漫长且耗费大量时间、精力的事情,感谢清华大学出版社的编辑、我的同事、家人对我的帮助,特别是我的太太一直在我身后默默地为家庭付出。

沈 哲

2021年6月