Scala编程(第5版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 结语

本章带你领略了Scala和它可能给你的编程工作带来的帮助。当然,Scala并不是“银弹”,并不能魔法般地让你更加高产。要做出实际的进步,需要根据实际需求有选择地应用Scala,这需要学习和实践。如果你是从Java来到Scala的,则最具挑战的可能是Scala的类型系统(比Java的类型系统更为丰富)和Scala对函数式编程的支持。本书的目标是循序渐进地引导你逐步学习和掌握Scala。我们认为这会是一次有收获的智力旅程,能帮助你拓展知识领域并对程序设计有新的、不一样的思考。希望你能通过Scala编程获得快乐和启发。

下一章,我们将带你开始编写实际的Scala代码。

[1]Scala的发音为skah-lah(斯嘎喇)。

[2]如果你还不太清楚这个程序的细节,请容我们继续讲下去,这些细节在后面两章都会介绍。

[3]Raymond,《大教堂与市集》[Ray99]

[4]Steele,《培育编程语言》[Ste99]

[5]factorial(x),或者数学表示法x!,是算式1 × 2 × … × x的结果,其中0!的结果定义为1。

[6]Scala自带标准库,本书会介绍其中的一些功能。更多信息请参考随Scala发行且可以在线查询的标准库Scaladoc文档。

[7]Kay,《Smalltalk的早期历史》[Kay96](全书参考资料列表下载方法见“读者服务”)

[8]从Java 8开始,接口可以有默认方法(default method)实现,不过默认方法并不能提供Scala特质的所有特性。

[9]最开始,Scala还有另一个实现运行在.NET平台,不过现在已经不活跃了。而最近,另一个运行在JavaScript上的实现——Scala.js,正在变得越来越流行。

[10]在Scala 3.0.0中,标准的扩展通过隐式转换(implicit conversion)实现。在后续版本中,这些实现细节将被替换为扩展方法(extension method)。

[11]译者注:截至本书第5版成稿,《Scala高级编程》(Advanced Programming in Scala)还未出版。

[12]唯一真正的区别在于Scala生成的实例变量是final的。你会在10.6节了解到如何编写不是final的实例变量。

[13]当函数字面量的结果类型是Boolean时,可以被称作前提。

[14]用下画线作为入参的占位符的用法在8.5节有详细介绍。

[15]我们将在第18章介绍泛型;在17.5节介绍交集(如A & B & C);在第20章介绍抽象类型。

[16]Kay,一封关于面向对象编程意义的电子邮件。[Kay03]

[17]Dijkstra,《结构化编程笔记》[Dij70]

[18]Scala在类型标注方面与Java最大的不同:Scala的写法是“variable: Type”而不是Java的“Type variable”。Scala的这种将类型写在后面的做法类似于Pascal、Modula-2和Eiffel。这个区别的主要原因与类型推断相关:类型推断让我们省去对变量类型和方法返回类型的声明。如果用“variable: Type”这样的语法,则简单地去掉冒号和类型名称即可。而如果用C风格的“Type variable”语法,则无法简单地去掉类型名称,因为再没有其他的标记来开始一个定义了。这时需要某种其他的关键字来表示缺失的类型标注(C# 3.0在一定程度上支持类型推断,采用了var关键字)。这种额外的关键字更像是临时添加的,与Scala采用的方式相比,就显得不那么常规和自然。

[19]译者注:这类对象拥有某种统一的行为特征,或者说同时支持某种操作或方法,而不是简单、死板地声明为继承自某个共通的超类型。

[20]Landin,《未来的700种编程语言》[Lan66]

[21]想获取更多信息,请查阅参考文献中的[Ode03]、[Ode05]和[Emi07]。