原文链接
学习Scala的最佳方法取决于你已掌握的知识以及学习新知识的方式。有许多资源可以帮助你学习,比如图书,辅导手册,课程培训,教学演示,Scala编码实战等。许多人采用了一种很好的结合方式,那就是参考Scala众多图书中的一本并立刻投入到对自带Scala示例编译的尝试中去。然而,你或许也可以尝试从Scala培训课程或者在线资料开始你的学习。
随着Scala知识的丰富,你将会发现更高深的素材和一个十分友善的Scala社区将让你受益匪浅。他们对Scala抱有极大热忱,并热烈欢迎所有Scala新人。社区中的许多人已经著写了许多对Scala新人很有帮助的材料,他们将回复那些通过email寻求帮助的人,在众多论坛或个人博客上干练地分享新技术,新概念,新工具等。
写给Scala初学者
如果仅仅想开始学习编码,那么你将发现市面上一大部分Scala学习材料都假定你已经具有足够的编程经验了。这里我们为初学者推荐两份非常实用的资源,它们将能迅速带你融入Scala的世界:
coursera在线课程Scala 函数式程序设计原理,该课程由Scala缔造者Martin Odersky主讲。它需要你具有大学或相当水平知识以便传授你函数式编程的基础知识。通过完成其中的编程作业,你将学到很多Scala的知识。
Kojo是一个Scala交互式开发环境,它能带你探索,玩转数学,艺术,音乐,动画和游戏。
你的第一行代码
程序“Hello,World”
作为第一个例子,我们采用标准的”Hello,World!”程序来演示在不需要对Scala语言有具体了解情况下的应用方式。
object HelloWorld{
def main(args:Array[String]):Unit={
println(“Hello,World!”)
}
}
这个程序的结构应该会Java程序员觉得熟悉:它包含了main方法,这个方法用于打印一个友善的问候到标准输出界面。
我们假定Scala软件和用户环境已经正确地安装和搭建起来了。例如:
环境 | 变量 | 变量值(示例) |
---|---|---|
Unix | $SCALA_HOME |
/usr/local/share/scala |
Unix | \$PATH |
\$PATH:$SCALA_HOME/bin |
Windows | %SCALA_HOME% |
c:\Progra~1\Scala |
Windows | %PATH% |
%PATH%;%SCALA_HOME%\bin |
交互式执行
Scala
命令可以在交互式shell中启动,在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编译器的工作模式类似于Java SDK的Java编译器中的命令javac
。
>scalac HelloWorld.scala
javac
默认地在当前工作目录下生成class文件。你也可以通过使用-d
选项指定一个不同的输出路径。
>scala -d classes HelloWorld.scala
运行
scala
命令可以通过辅以合适的选项运行被编译器编译生成的二进制文件:
>scala HelloWorld
scala
允许我们指定命令参数,比如参数-classpath
(别名-cp
):
>scala -cp classes HelloWorld
scala
命令参数必须是最高层级的对象。如果某对象继承了App
特质,那么这个对象内的所有声明都将被运行;否则,你不得不增加一个main
方法作为程序的入口。
下面展示“Hello,World”如何像App
特质一样运行:
object HelloWorld extends App{
println(“Hello,World!”)
}
脚本化
我们同样可以作为shell脚本或batch命令运行我们的示例(详见scala
命令主页示例)
bash脚本script.sh
包含以下Scala代码
#!/bin/sh
exec scala “0"" @”
!#
object HelloWorld extends App {
println(“Hello, world!”)
}
HelloWorld.main(args)
这个脚本可以直接在命令行shell中运行:
>./script.sh
注释:在这里,我们假定script.sh
具有执行权限,并能在PATH
环境变量中指定scala
命令的搜索路径。