
前言
你可以看出编程语言让我着迷。作为一名语言爱好者,我用大约15种不同的语言编写过代码,并就其中一些语言写过书。我喜欢语言,所有的语言。
学习一门语言就像参观一座城市。你会遇到新事物,但也会看到常见的事物。熟悉的东西会带来舒适,差异会激发兴趣。为了成功地学习一门语言,我们需要在两者之间取得良好的平衡。
我们中的一些人渴望成为通晓多种语言的程序员。Kotlin本身就是一种多语种语言。它汇集了来自许多不同语言的强大功能。Kotlin的创建者从各种语言中汲取精华,并将它们组合成一种非常平易近人和实用的语言。
当开始学习Kotlin时,我的大脑被激活了,因为我看到了我所喜欢的不同语言(比如Java、Groovy、Scala、C++、C#、Ruby、Python、JavaScript、Erlang、Haskell等)中的特性。同时,Kotlin有很多精妙细微之处,使其在编程时比使用上述语言中的任何一种都更有效率。
有些语言会告诉你应该如何编写代码,Kotlin不是其中之一。使用Kotlin,你可以决定哪种范式最适合手头的应用程序。例如,你可能会发现命令式风格在大型应用程序中更好,因为你必须处理固有的副作用和异常,而Kotlin使以这种风格编程变得更容易。但是,在应用程序的另外一部分中,你可能需要处理大数据转换,因此你认为函数式风格更适合,Kotlin将立即转换为一种迷人的函数式编程语言。当编写面向对象的代码时,你将看到编译器是在为你工作,而不是你在为编译器工作。
你将在本书中看到我对这门语言的兴奋之情。学习和应用Kotlin非常有趣。我希望这本书能让你的语言学习之旅变得愉快。谢谢你学习这本书。
本书的目标读者
本书面向程序员、开发主管、架构师和技术经理。本书假定读者熟悉编程的基础知识,同时也假定读者对Java和JDK有一定的了解,但并没有假定读者对Kotlin有任何了解。如果你是一名Android程序员,本书会为你将来用Kotlin来为这些设备编程打下良好的基础,尽管本书并不是专门针对Android平台的。
如果你是Kotlin新手,本书将帮助你入门并快速地将该语言应用到你的项目中。如果你已经在使用Kotlin,可以使用本书来加深对该语言的一些高级特性的理解。
你还可以使用本书来培训你的开发人员,让他们精通Kotlin,用它来编写高度流畅和富于表现力的代码,并解决复杂的问题。
本书内容
Kotlin是一种多范式编程语言。你可以用Kotlin编写简单的脚本、面向对象的代码、函数式代码,以及异步编程等。为了合理地涵盖这一广泛的主题,本书分为多个部分。
第一部分主要介绍使用Kotlin编写脚本。第二部分是关于面向对象编程的。在第三部分中,你将学习如何使用该语言的函数式风格的功能。第四部分将把目前为止所学的知识结合起来,使代码更加流畅,并教会你如何创建内部领域特定语言(DSL)。在第五部分中,你将了解协程和异步编程。最后,第六部分涉及Java的互操作、测试、在Spring中使用Kotlin,以及使用Kotlin编写Android应用程序。
以下是每章所涵盖的内容。
在第1章中,我们将了解使用Kotlin的原因,下载必要的工具,并开始编写代码。
从Java转为Kotlin的程序员在开始学习Kotlin的新特性和不同之处之前,需要先忘却一些实践和语法。我们将在第2章介绍这些内容。
在Kotlin中,函数是“一等公民”,该语言提供了很多内容,比如默认参数、命名参数和可变参数。第3章将探索这些与函数相关的功能。
在命令式编程中,我们经常使用外部迭代器。第4章介绍Kotlin的迭代器如何使任务变得可以忍受,以及参数匹配语法如何从条件语句中消除大量的干扰。
我们在编程时广泛使用集合。第5章将向你展示如何使用视图接口来处理Kotlin的JDK集合。
Kotlin有一个健全的类型系统,它的编译时类型检查超出了我们对静态类型语言的期望。第6章将介绍Kotlin的基本类型、可空和不可空引用、智能类型转换等。
尽管在语义上是等价的,但在Kotlin中创建类与在Java中创建类是完全不同的。第7章将学习创建单例、类、伴生对象,以及使用数据类的原因。
Kotlin处理继承的方式与Java中使用继承的方式有很大不同。默认情况下类是final的,并且该语言设置了一些规则来改进类型的安全性和编译时的检查。我们将在第8章中深入探讨这个主题。
作为直接支持委托的语言之一,Kotlin提供了一些内置的委托,并且使创建自定义委托变得更加容易。第9章将首先讨论何时以及为何使用委托,然后深入讨论如何使用委托。
第10章将学习如何创建lambda表达式和编写高阶函数。我们还将介绍Kotlin提供的用来消除函数调用开销并提高性能的工具。
内部迭代器提供了流畅性,而序列给了我们效率。我们将在第11章中介绍对迭代和处理对象集合应用函数风格。
第12章将展示Kotlin用于创建简洁、流畅、优雅和富于表现力的代码的许多能力。
第13章介绍如何创建内部DSL,为你的专用语言定义你自己的语法。
Kotlin是JVM上为数不多的提供尾调用优化的语言之一。我们将在第14章中看到它的实际应用,以及使用记忆来降低计算的复杂性。
协程是Kotlin 1.3中的一个稳定特性,它与延续一起为异步编程提供了基础架构。协程和延续的基础知识在第15章中进行介绍。
第16章介绍应用协程来创建实际的应用程序,这些应用程序可以从异步程序执行中获益。
Kotlin可以运行在不同的平台上,包括Java虚拟机。在第17章中,你将学习如何将Kotlin与Java混合使用,如何在Java的现代版本中使用Kotlin——即使用Java模块,如何将其与Maven和Gradle一起使用,以及如何在同一个应用程序中顺利地使用Java和Kotlin。
尽管Kotlin编译器会捕获到一些错误,自动化测试对于可持续敏捷开发来说还是一个必不可少的实践。第18章介绍如何创建单元测试以及度量代码覆盖率。
第19章将探索面向Kotlin程序员的Spring库以及这些库所提供的独特功能。
最后,在第20章中,我们将使用Kotlin创建一个与后端服务对话的Android应用程序。
本书所使用的Kotlin和Java版本
要运行本书中的示例,需要Kotlin 1.3和Java 1.6或更高版本。尽管大多数示例也适用于早期版本的Kotlin,但有些示例需要使用Kotlin 1.3。Java互操作章节中的示例需要Java 9或更高版本。第1章会提供所需工具的下载说明。
如何阅读代码示例
本书中的大多数示例都是用Kotlin脚本编写的,因此你可以轻松地将它们作为单个文件运行,而无须显式编译。如果需要编译和其他步骤,会在代码旁边提供说明。
为了节省篇幅,我们会在println()命令的同一行或下一行上,将一段代码的输出显示为注释行。只有少量注释是用于说明代码的某些内容,而不是显示预期的输出。
在线资源
本书英文版在Pragmatic Bookshelf网站上有一个官方页面[1]。你可以从那里下载本书所有示例的源代码,还可以通过提交勘误来提供反馈。
[1] http://www.pragprog.com/titles/vskotlin