scala-spiral-3d-2-toned-down.png

Michel Schinz 与 Philipp Haller 著 Lightsing 译

介绍

此教学将对 Scala 语言以及编译器做一个简易介绍。面向的读者为具有编程经验,并且想简单了解 Scala 的人。本文假设读者有着基本的、最好是 Java 上的面向对象知识。

第一个例子

这里用标准的 Hello world 程序作为第一个例子。虽然它很无趣,但让我们可以用少量语言特质来演示 Scala 工具。程序如下:

object HelloWorld {
  def main(args: Array[String]) {
    println("Hello, world!")
  }
}

Java 程序员应该对这个程序结构感到熟悉:这有一个main 函数,该函数接受一个字符串数组作为参数,即命令行参数;函数内容为调用已定义好的函数println 并用Hello world 字符串当参数。 main 函数没有返回值 (它是一个过程方法)。因此并不需要声明返回值类型。

Java 程序员不太熟悉的是包着 main 函数的 object 声明。这种声明引入我们一般称之 Singleton 的东西,也就是只有一个实例的类。所以上面的代码同时声明了一个 HelloWorld 类和一个该类的实例,也叫做 HelloWorld。该实例会在第一次被使用到的时候即时产生。

眼尖的读者可能已经注意到这边 main 函数的声明没有带着 static。这是因为 Scala 没有静态成员 (函数或属性)。 Scala 程序员将这成员声明在单实例对象中,而不是定义静态成员。

编译这个例子

我们用 Scala 编译器 scalac来编译这个例子。 scalac 就像大多数编译器一样,它接受源代码文件当对象,并接受额外的选项,然后产生一个或多个对象文件。它产出的对象文件为标准 Java class 文件。

如果我们将上面的程序存为文件 HelloWorld.scala,编译指令为( > 是提示字符,不用打):

这会在当前目录产生一些 class 文件。其中一个会叫做 HelloWorld.class,里面包含着可被 scala 直接执行的类。

执行示例

一旦编译过后,Scala 程序可以用 scala 指令执行。其使用方式非常像执行 Java 程序的 java 指令,并且接受同样选项。上面的示例可以用以下指令来执行并得到我们预期的输出:

> scala -classpath . HelloWorld

Hello, world!

与 Java 互动

Scala 的优点之一是它非常容易跟 Java 代码沟通。Scala 会默认 import java.lang 底下之类,其他类则需要明确导入。

让我们看个展示这点的示例。取得当下日期并根据某个特定国家调整成该国格式,如法国。