- 基于Kotlin的Spring Boot微服务实战
- 袁康
- 2000字
- 2020-11-24 13:00:54
1.1 Kotlin简介
Kotlin是一门运行在Java平台的函数式编程语言,由JetBrains公司开发。Kotlin支持多个平台,包括移动端、服务端及浏览器端。Kotlin历经了1.1、1.2版本,目前最新的版本是1.3。
Kotlin融合了面向对象和函数式编程,其简洁、安全、优雅,可以和Java完全交互,并可使用Java编写的第三方Jar包。下面我们以一个小例子解释Kotlin是什么。这个例子定义了一个Animal类,然后创建了一些Animal类的对象,要找出其中age最大的Animal对象并将其打印出来。在这个例子中,可以看到Kotlin的许多特性。代码如下:
这里声明了一个Animal对象,它带有两个属性name和age。age属性的默认值为null。当创建一个name=Dog的Animal对象时,没有设置age属性,默认值是null。之后,使用maxBy方法查找年龄最大的Animal对象,使用it作为默认的参数名。如果age是null的话,设置默认值为0。由于没有指定Dog的年龄,因此使用默认值0。最终,Cat是年龄最大的Animal对象。
通过这个例子,我们对Kotlin有了一个初步的印象,下面介绍Kotlin的几个特性。
静态类型
Kotlin是一种静态类型编程语言,编译器可以验证程序中的变量、表达式类型。而基于JVM的动态类型编程语言,如Groovy,可以在运行时解析方法和字段引用。另外,Kotlin不需要在代码中指定每一个变量的类型,在许多场景中,能够根据上下文自动推断变量类型。目前大多数公司仍然在使用Java 7或Java 8,这些Java版本没有这个特性。下面是一个简单的例子:
其中声明了一个变量,由于它以一个整数初始化,因此Kotlin会自动推断这个变量的类型为Int。静态类型有如下好处。
性能:由于不需要在运行时判断需要调用哪个方法,因此方法调用速度快。
可读性:由于编译器校验了程序的正确性,因此在运行时发生崩溃的可能性较小。
可维护性:由于能看到代码调用了什么类型的对象,所以可以更容易地理解代码。
工具支持:有丰富的IDE支持编程。
Kotlin支持可为空的类型(nullable type),可以在编译时检查可能的空指针异常,使得程序更加可靠。此外,Kotlin还支持函数类型(functional type)。
支持函数式编程和面向对象编程
函数式编程的关键概念如下:
函数是一等公民。可以把函数看作一个值,把函数存储在变量中作为一个参数传递或者返回。
不变性。使用不可变的对象,一旦对象被创建,它的状态不可更改。
没有副作用。给定相同的输入将会返回相同的结果。它不会修改其他对象的状态或者和外界进行交互
用函数编写代码简洁、优雅。将函数作为一个值可带来更强大的抽象力,避免代码冗余。函数式编程是线程安全的。如果使用不可修改的数据结构和纯函数,可以确保不会出现不安全的修改,也不需要设计复杂的同步方案。Kotlin有丰富的特性支持函数式编程:
允许函数接收其他函数作为参数或者返回其他函数。
使用Lambda表达式,使用最小的模板分发代码块。
为创建不可变对象提供了精简的语法。
标准库为以函数式风格使用对象和集合提供了丰富的API。
实用性
Kotlin基于多年的大规模系统设计的行业经验,借鉴了许多软件开发者遇到的案例,因此具有极强的实用性。JetBrains公司和社区的开发者已经使用Kotlin早期版本许多年,他们的各种反馈已经融合到发行版中。Kotlin不强迫你使用任何特定的编程风格或范式。当你使用这门语言时,可以使用自己在进行Java开发时熟悉的风格。IntelliJ IDEA提供了对Kotlin强大的支持,可自动将Java转换为Kotlin,可以优化代码块,并提供了代码填充功能。
精简
代码越精简,人理解得越快,维护越方便。使用Kotlin,可以简便地定义数据类,省略了大量的getter、setter和将构造器参数赋值给字段的逻辑。Kotlin拥有丰富的标准库,这些库让你可以通过调用库函数来代替那些冗长的、重复的代码片段。Kotlin对Lambda表达式的支持使得将少部分代码传递到库函数变得十分容易。这让你可以将所有通用的部分封装到函数库,代码中仅保留业务相关的部分。
安全
使用Kotlin可以通过花费较小的代价即达到一个比Java更高级别的安全水平。Kotlin努力从程序中移除空指针异常,其类型系统跟踪可能为空的值,并且禁止运行时导致空指针异常的操作。它需要的额外成本是最小的:只需要一个单独的字符,在末尾加一个问号,即标记为一个可能为空的类型。
另外,Kotlin提供了许多便捷的方式来处理可能为空的数据,这在避免应用程序崩溃方面提供了极大的帮助。
Kotlin有助于避免类型强转异常。使用Java编程,开发者经常会遗漏类型检查,而Kotlin将类型检查和转换合并为一个单独的操作,一旦检查了类型,就可以应用该类型的成员而无须额外进行类型转换。
互操作性
Kotlin可以使用已有的Java库,调用Java方法,扩展Java类,实现Java接口。同时,也可以在Java代码中调用Kotlin代码。Kotlin的类和方法能够像常规的Java类和方法那样被调用,而且我们还可以在项目的任何地方混合使用Java和Kotlin。
Kotlin尽可能地使用现有的Java库。例如,Kotlin并没有自己的集合库,它依赖Java标准库的类,通过额外的函数来扩展它们,这样就可以更加方便地使用Kotlin了。
Kotlin工具还为多语言项目提供了全面的支持。它能够编译任意一个混合Java和Kotlin的源文件,不论它们之间是如何相互依赖的。这个IDE特性对其他语言也是有效的。它将允许你做以下事情:
在Java和Kotlin源文件中自由切换。
调试混合语言项目并在用不同语言编写的代码中进行单步跟踪。
使用Kotlin重构和正确地升级你的Java函数。