学习Scala最好的方法取决于你已经会的东西以及你想学习的方式。有很多可供选择的资源,比如书籍,教程,培训课程,演示报告以及使用Scala编译器练习。很多人会找到一种组合方式,一方面准备一本Scala的书籍并且立即开始使用Scala编译器尝试示例。另一方面,你可能想要从Scala培训课程或者使用在线提供的资料开始。
随着你的Scala知识不断增长,你会发现有很多高阶资料和一个非常友好的Scala社区可以帮助你。他们都对Scala富有激情并且热烈欢迎新成员。很多人都为新接触Scala的程序员写了帮助资料,他们会在Scala论坛或个人博客中回复寻求帮助的邮件或者分享新技术、高阶概念或工具。
为编程初学者准备的Scala
如果你刚开始学习编程,你会发现大部分关于Scala的资料都假定你已经有一定的编程经验了。有两个很有价值的资源推荐给编程初学者,它们会带领你进入Scala的世界:
- 在线课堂Functional Programming Principles in Scala,由Coursera提供。由Scala的创造者Martin Odersky授课,这个网络课堂采用一些学术方法教授函数式编程的基本原理。你会通过解决编程任务学到很多Scala知识。
- Kojo是一个使用Scala编程来探索和玩数学,艺术,音乐,动画和游戏的交互式学习环境。
你的第一行代码
"Hello World!"程序
作为第一个示例,我们使用标准的"Hello World!"程序来说明在对很多语言知识不了解的情况下如何使用Scala工具。
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}
对Java程序员来说,这个程序的结构应该很熟悉,它包含了main
函数,可以打印"Hello World!"到标准输出。
我们假设Scala软件和用户环境都已经正确设置好。例如:
环境 | 变量 | 值(示例) |
---|---|---|
Unix | $SCALA_HOME |
/usr/local/share/scala |
$PATH |
\$PATH:\$SCALA_HOME/bin |
|
Windows | %SCALA_HOME% |
c:\Progra~1\Scala |
%PATH% |
%PATH%;%SCALA_HOME%\bin |
|
交互式运行
Scala
命令会启动一个交互式shell,在这里Scala表达式可以被交互式地解释执行。
> scala
This is a Scala shell.
Type in expressions to have them evaluated.
Type :help for more information.
scala> object HelloWorld {
| def main(args: Array[String]): Unit = {
| println("Hello, world!")
| }
| }
defined module HelloWorld
scala> HelloWorld.main(Array())
Hello, world!
scala>:q
>
:q
缩写代表内部shell命令:quit
,用于退出解释器。
编译
scalac
命令会编译一个(或多个)Scala源文件并且生成可以在任何标准JVM上执行的Java字节码。Scala编译器和javac
(Java SDK的编译器)的工作方式类似。
> scalac HelloWorld.scala
默认地,scalac
生成class文件到当前的工作路径中。可以使用-d
选项来指定一个不同的输出路径。
> scalac -d classes HelloWorld.scala
执行
scala
会使用合适的选项来执行生成的字节码:
>scala HelloWorld
scala
允许我们指定命令选项,如-classpath
(也可写为-cp
)选项:
>scala -cp classes HelloWorld
scala
命令的参数必须是一个顶层对象。如果对象扩展了scala.App特征,那么所有包含在这个对象中的语句都会被执行,否则你必须添加一个main
函数作为程序入口。
下面是使用App
特征的"Hello, world!"程序:
object HelloWorld extends App {
println("Hello, world!")
}
脚本
我们可能也想让示例作为shell脚本或者批处理命令运行。
bash shell脚本script.sh
包含下面的Scala代码:
#!/usr/bin/env scala
object HelloWorld extends App {
println("Hello, world!")
}
HelloWorld.main(args)
可以直接使用shell命令执行:
> ./script.sh
注意:我们假设这里的script.sh
文件有执行权限并且scala
命令的搜索路径已经配置在PATH
环境变量中了。