无标题文章

转自:https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-scala/index.html

Scala 语言衍生自 Funnel 语言。Funnel 语言尝试将函数式编程和 Petri 网结合起来,而 Scala 的预期目标是将面向对象、函数式编程和强大的类型系统结合起来,同时让人要能写出优雅、简洁的代码。本文希望通过一系列 Java 与 Scala 语言编写的相同程序代码的对比,让读者能够尽快地熟悉 Scala 语言。

Scala 简介Scala 是一种把面向对象和函数式编程理念加入到静态类型语言中的语言,可以把 Scala 应用在很大范围的编程任务上,无论是小脚本或是大系统都是用 Scala 实现。Scala 运行在标准的 Java 平台上,可以与所有的 Java 库实现无缝交互。可以用来编写脚本把 Java 控件链接在一起。函数式编程有两种理念做指导,第一种理念是函数是第一类值。在函数式语言中,函数也是值,例如整数和字符串,它们的地位相同。您可以把函数当作参数传递给其他函数,当作结果从函数中返回或保存在变量里。也可以在函数里定义其他函数,就好像在函数里定义整数一样。函数式编程的第二个主要理念是程序的操作符应该把输入值映射到输出值而不是就地修改数据。Scala 程序会被编译为 JVM 的字节码。它们的执行期性能通常与 Java 程序一致。Scala 代码可以调用 Java 方法,访问 Java 字段,继承自 Java 类和实现 Java 接口。实际上,几乎所有 Scala 代码都极度依赖于 Java 库。Scala 极度重用了 Java 类型,Scala 的 Int 类型代表了 Java 的原始整数类型 int,Float 代表了 float,Boolean 代表了 boolean,数组被映射到 Java 数组。Scala 同样重用了许多标准 Java 库类型。例如,Scala 里的字符串文本是 Java.lang.String,而抛出的异常必须是 java.lang.Throwable 的子类。


Scala 隐式引用了包 java.lang、scala 的成员、Predef 的单例对象。Predef 包括 println 和 assert 等等。清单 21 和 23 所示代码里,无论 ChecksumAccumulator.scala 还是 Summer.scala 都不是脚本,因为他们是以定义结束的。反过来说,脚本必然以一个结果表达式结束。因此如果您尝试以脚本方式执行 Summer.scala,Scala 解释器将会报错说 Summer.scala 不是以结果表达式结束的(当然前提是您没有在 Summer 对象定义之后加上任何您自己的表达式)。正确的做法是,您需要用 Scala 编译器真正地编译这些文件,然后执行输出的类文件。其中一种方式是使用 scalac,Scala 的基本编译器。输入$ scalac ChecksumAccumulator.scala Summer.scala 命令会编译您的源代码,每次编译器启动时,都要花一些时间扫描 jar 文件内容,并在即使您提交的是新的源文件也需要查看之前完成其他初始化工作。

因此,Scala 的发布包里还包括了一个叫做 fsc(快速 Scala 编译器)的 Scala 编译器后台服务:daemon。您可以这样使用: $ fsc ChecksumAccumulator.scala Summer.scala 第一次执行 fsc 时,会创建一个绑定在您计算机端口上的本地服务器后台进程。然后它就会把文件列表通过端口发送给后台进程去编译,后台进程完成编译。下一次您执行 fsc 时,后台进程就已经在运行了,于是 fsc 将只是把文件列表发给后台进程,它会立刻开始编译文件。使用 fsc,您只需要在第一次等待 Java 运行时环境的启动。如果想停止 fsc 后台进程,可以执行 fsc -shutdown 来关闭。

不论执行 scalac 还是 fsc 命令,都将创建 Java 类文件,然后您可以用 Scala 命令,就像之前的例子里调用解释器那样运行它。不过,不是像前面每个例子里那样把包含了 Scala 代码的带有.scala 扩展名的文件交给它解释执行,而是采用这样的方式,$ scala Summer of love。

本文对 Scala 语言的基础做了一些解释,由于篇幅所限,所以下一篇文章里会针对 Spark 附带的示例代码、Spark 源代码中出现的 Scala 代码进行解释。

结束语

通过本文的学习,读者了解了如何下载、部署 Scala。此外,通过编写 Scala 与 Java 相同功能的程序,让 Java 程序员可以快速掌握 Scala 语言,为后面的 Spark 源代码分析文章做知识准备。目前市面上发布的 Spark 中文书籍对于初学者来说大多较为难读懂,作者力求推出一系列 Spark 文章,让读者能够从实际入手的角度来了解 Spark。后续除了应用之外的文章,还会致力于基于 Spark 的系统架构、源代码解释等方面的文章发布。

相关学习资料移步:

资料传送门

推荐阅读更多精彩内容