基于Kotlin的Spring Boot微服务实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 Scala、Kotlin、Java的对比

Scala、Kotlin、Java都是以Java虚拟机(JVM)为目标运行环境的语言。Scala、Kotlin运行于JVM上,所以Scala、Kotlin可以访问Java类库,能够与Java框架进行互操作。Scala、Kotlin将面向对象和函数式编程有机结合在一起,既有动态语言的灵活性和简洁性,也有静态语言的类型检查功能来保证安全和提高执行效率。

Scala是一门多范式的编程语言。Scala具有面向对象的特性,每个值都是对象,对象的数据类型及行为由类和特性描述。类抽象机制的扩展有两种途径:一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。Scala是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法,用于定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。可以利用Scala的模式匹配编写类似正则表达式的代码处理XML数据。Scala具备类型系统,通过编译时检查,可保证代码的安全性和一致性。类型系统支持泛型类、协变和逆变、标注、类型参数的上下限约束、把类别和抽象类型作为对象成员、复合类型、引用自己时显式地指定类型、视图、多态方法、扩展性等。Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱收发消息。Actor可以复用线程,因此在程序中可以使用数百万个Actor,而线程只能创建数千个。

Kotlin语法和Java很像,容易上手,推荐以循序渐进的方式开发项目:允许项目中同时存在Java和Kotlin代码文件,允许Java与Kotlin互相调用。这使得开发者可以很方便地在已有项目中引入Kotlin。Kotlin代码量少且代码末尾没有分号。Kotlin是空安全的,在编译时期就处理了各种null的情况,避免了执行时异常。Kotlin可扩展函数,可以扩展任意类的更多的特性。Kotlin也是函数式的,可使用Lambda表达式来更方便地解决问题。Kotlin具有高度互操作性,可以继续使用所有用Java编写的代码和库,甚至可以在一个项目中使用Kotlin和Java两种语言混合编程。

Java是企业级的开发语言,很多互联网公司会使用Java开发后台应用,目前主要使用Java 7和Java 8进行开发。Java是面向对象的、分布式的、健壮的、安全的,近些年也增加了一些函数式语言的特性。Java 8中引入了Lambda表达式、Stream,提供了类似Scala、Kotlin的函数式运算。Java 8使用Optional避免空指针;Java 11中引入了本地变量类型推断,增强了Stream,增强了Optional。

Kotlin是更好的Java,Kotlin是一种实用的语言,旨在提高Java开发人员的工作效率,在Java模型之上有一些Scala特性。它增加了Java程序员想要的功能,如Lambda表达式和基本功能。虽然Kotlin为函数式编程提供了一些支持,但它确实可以实现更简单的过程式编程或命令式编程。

Scala比Java更强大,旨在完成Java无法做到的事情。Scala为高级函数编程提供了很好的支持,这增加了复杂性,使Scala成为一门比较难学习的语言。Scala中有多种编程风格,可能会导致混乱或为每种需求提供最佳风格,这会导致更高的开发成本。

Kotlin可以很方便地融入Java已有的生态,如Spring Boot、Spring Cloud、Dubbo等。Spring 5引入了对Kotlin的支持。Scala有自己的生态,目前其比较流行的Web框架是Lift框架和Play框架,微服务框架有Akka,响应式微服务框架为Lagom Framework。Scala的框架有一定的学习门槛和难度,对普通Java开发者来讲不太容易掌握。

基于以上比较,Kotlin和Java良好的互操作性使得Java开发者可以很快地掌握使用Kotlin开发微服务应用的方法,这也是本书的目标。