
1.1.2 具有类型推断的静态类型
静态类型语言提供了编译时类型安全性,但是Kotlin在防止其他静态类型语言中可能出现的常见错误方面做了额外的努力。例如,Kotlin类型系统区分可空类型和不可空类型。与Scala、F#和Haskell等语言一样,它还具有很强的类型推断能力。你不必花时间来输入对每个查看代码的人都显而易见的类型细节。同时,当类型可能不是100%清楚时,Kotlin会要求你指定它。它并不过分热心,在类型推断方面比较适当,因此我们可以提高效率,同时代码也可以是类型安全的。
1. 一种用于全栈开发的语言
正如javac将Java源代码编译成在Java虚拟机(JVM)上运行的字节码一样,kotlinc-jvm将Kotlin代码编译成在虚拟机上运行的字节码。你可以使用Kotlin编写服务器端代码和Android应用程序,并指定用于部署的虚拟机的特定版本。因此,后端的Spring代码和设备上的Android或iOS本地代码都可以使用同一种语言来编写。在必要的时候,你还可以将Kotlin代码与Java代码混合使用——不必保留遗留代码。
Kotlin也可转为JavaScript。你可以编写可转换为JavaScript的Kotlin代码,并在服务器端的Node.js或Web前端的浏览器中运行。
使用Kotlin/Native,你可以将代码编译为本地二进制文件以便在目标平台上运行,也可以编译为WebAssembly以便在浏览器中运行。
2. 流畅和优雅
有些语言过于死板,并强迫你创建样板代码。一些开发人员认为IDE消除了手工编写代码的负担。没错,但是即使IDE抛出了样板代码,你的团队每天也必须花费时间和精力维护这些代码。像Scala、Groovy和Ruby这样的语言可以综合程序员必须编写的代码。同样,Kotlin根据JavaBean约定隐式地为你创建了一些东西,比如字段、getter和setter。让你可以付出更少的努力,得到更好的结果。
Kotlin让一些东西成为可选项。例如,分号是可选的。不必放置符号,让语法变得更流畅,这是创建易于阅读的内部DSL所必需的。Kotlin还提供了一个我们可以使用的中缀(infix)注释,使点和括号成为可选的。使用这些功能,你可以编写流畅优雅的代码,如下所示:

是的,这不是虚构的,这是真正的Kotlin代码。在本书的后面,你将学习创建自己的这样流畅的代码,而不需要任何解析器或外部工具。