學習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文件到當前的工作路徑中??梢允褂?code>-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
環境變量中了。