Scala编程(第4版)
上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发行同时也可以在线(http://www.scala-lang.org)查询的标准库Scaladoc文档。

[7]Kay,《Smalltalk的早期历史》[Kay96]

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

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

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

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

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

[13]我们将在第19章介绍泛型;在第12章介绍交集(例如A with B with C);在第20章介绍抽象类型。

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

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

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

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

[18]更多信息查阅参考文献中的[Ode03]、[Ode05]和[Emi07]。