學習Scala最好的方法取決于你已經(jīng)會的東西以及你想學習的方式。有很多可供選擇的資源,比如書籍,教程,培訓課程,演示報告以及使用Scala編譯器練習。很多人會找到一種組合方式,一方面準備一本Scala的書籍并且立即開始使用Scala編譯器嘗試示例。另一方面,你可能想要從Scala培訓課程或者使用在線提供的資料開始。
隨著你的Scala知識不斷增長,你會發(fā)現(xiàn)有很多高階資料和一個非常友好的Scala社區(qū)可以幫助你。他們都對Scala富有激情并且熱烈歡迎新成員。很多人都為新接觸Scala的程序員寫了幫助資料,他們會在Scala論壇或個人博客中回復尋求幫助的郵件或者分享新技術(shù)、高階概念或工具。
為編程初學者準備的Scala
如果你剛開始學習編程,你會發(fā)現(xiàn)大部分關(guān)于Scala的資料都假定你已經(jīng)有一定的編程經(jīng)驗了。有兩個很有價值的資源推薦給編程初學者,它們會帶領(lǐng)你進入Scala的世界:
- 在線課堂Functional Programming Principles in Scala,由Coursera提供。由Scala的創(chuàng)造者Martin Odersky授課,這個網(wǎng)絡課堂采用一些學術(shù)方法教授函數(shù)式編程的基本原理。你會通過解決編程任務學到很多Scala知識。
- Kojo是一個使用Scala編程來探索和玩數(shù)學,藝術(shù),音樂,動畫和游戲的交互式學習環(huán)境。
你的第一行代碼
"Hello World!"程序
作為第一個示例,我們使用標準的"Hello World!"程序來說明在對很多語言知識不了解的情況下如何使用Scala工具。
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}
對Java程序員來說,這個程序的結(jié)構(gòu)應該很熟悉,它包含了main函數(shù),可以打印"Hello World!"到標準輸出。
我們假設Scala軟件和用戶環(huán)境都已經(jīng)正確設置好。例如:
| 環(huán)境 | 變量 | 值(示例) |
|---|---|---|
| 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表達式可以被交互式地解釋執(zhí)行。
> 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縮寫代表內(nèi)部shell命令:quit,用于退出解釋器。
編譯
scalac命令會編譯一個(或多個)Scala源文件并且生成可以在任何標準JVM上執(zhí)行的Java字節(jié)碼。Scala編譯器和javac(Java SDK的編譯器)的工作方式類似。
> scalac HelloWorld.scala
默認地,scalac生成class文件到當前的工作路徑中??梢允褂?code>-d選項來指定一個不同的輸出路徑。
> scalac -d classes HelloWorld.scala
執(zhí)行
scala會使用合適的選項來執(zhí)行生成的字節(jié)碼:
>scala HelloWorld
scala允許我們指定命令選項,如-classpath(也可寫為-cp)選項:
>scala -cp classes HelloWorld
scala命令的參數(shù)必須是一個頂層對象。如果對象擴展了scala.App特征,那么所有包含在這個對象中的語句都會被執(zhí)行,否則你必須添加一個main函數(shù)作為程序入口。
下面是使用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命令執(zhí)行:
> ./script.sh
注意:我們假設這里的script.sh文件有執(zhí)行權(quán)限并且scala命令的搜索路徑已經(jīng)配置在PATH環(huán)境變量中了。