第 20 章 面向对象和函数式编程的混合:Java和Scala的比较

本章内容

  • 什么是Scala语言
  • Java与Scala是如何相生相承的
  • Scala中的函数与Java中的函数有哪些区别
  • 类和trait

Scala是一种混合了面向对象和函数式编程的语言。它常常被看作Java的一种替代语言,程序员们希望在运行于JVM上的静态类型语言中使用函数式特性,同时又期望保持Java体验的一致性。和Java比较起来,Scala提供了更多的特性,包括更复杂的类型系统、类型推断、模式匹配(19.4节提到过)、定义域语言的结构等。除此之外,你可以在Scala代码中直接使用任何一个Java类库。

你可能会有这样的疑惑:为什么要在一本介绍Java的书里特别设计一章讨论Scala。本书绝大部分内容都在介绍如何在Java中应用函数式编程。Scala和Java极其类似,它们都支持集合的函数式处理(类似于对Stream的操作)、一等函数和默认方法。不过Scala将这些思想向前又推进了一大步:它为实现这些思想提供了大量新特性,就这方面而言它领先了Java一大截。相信你会发现,对比Scala和Java实现方式上的不同以及了解Java目前的局限是非常有趣的。通过这一章,我们希望能针对这些问题为你提供一些线索,解答一些疑惑。然而本章的目标并不是宣扬要用Scala替代Java。事实上,JVM支持的新型编程语言有趣的还不少,譬如Kotlin就值得研究。我们相信,对于一个全面的软件工程师来说广泛地了解编程语言生态系统非常重要。

请记住,本章的目的并非让你掌握如何编写纯粹的Scala代码,或者了解Scala的方方面面。很多特性,比如模式匹配,在Scala中是天然支持的,也非常容易理解,不过这些特性在Java中并未提供,这部分内容在这里不会涉及。本章着重对比Java中新引入的特性和该特性在Scala中的实现,帮助你更全面地理解该特性。比如,你会发现,用Scala重新实现原先用Java完成的代码更简单,可读性也更好。

本章从对Scala的介绍入手:让你了解如何使用Scala编写简单的程序,以及如何处理集合。紧接着我们会讨论Scala中的函数式,包括一等函数、闭包以及柯里化。最后,我们会一起看看Scala中的类,以及一种名为trait的特性,它是Scala中带默认方法的接口。