學(xué)習(xí)Scala最好的方法取決于你已經(jīng)會(huì)的東西以及你想學(xué)習(xí)的方式。有很多可供選擇的資源辽装,比如書籍帮碰,教程,培訓(xùn)課程如迟,演示報(bào)告以及使用Scala編譯器練習(xí)收毫。很多人會(huì)找到一種組合方式,一方面準(zhǔn)備一本Scala的書籍并且立即開始使用Scala編譯器嘗試示例殷勘。另一方面此再,你可能想要從Scala培訓(xùn)課程或者使用在線提供的資料開始。
隨著你的Scala知識(shí)不斷增長玲销,你會(huì)發(fā)現(xiàn)有很多高階資料和一個(gè)非常友好的Scala社區(qū)可以幫助你输拇。他們都對(duì)Scala富有激情并且熱烈歡迎新成員。很多人都為新接觸Scala的程序員寫了幫助資料贤斜,他們會(huì)在Scala論壇或個(gè)人博客中回復(fù)尋求幫助的郵件或者分享新技術(shù)策吠、高階概念或工具。
為編程初學(xué)者準(zhǔn)備的Scala
如果你剛開始學(xué)習(xí)編程瘩绒,你會(huì)發(fā)現(xiàn)大部分關(guān)于Scala的資料都假定你已經(jīng)有一定的編程經(jīng)驗(yàn)了猴抹。有兩個(gè)很有價(jià)值的資源推薦給編程初學(xué)者,它們會(huì)帶領(lǐng)你進(jìn)入Scala的世界:
- 在線課堂Functional Programming Principles in Scala锁荔,由Coursera提供蟀给。由Scala的創(chuàng)造者M(jìn)artin Odersky授課,這個(gè)網(wǎng)絡(luò)課堂采用一些學(xué)術(shù)方法教授函數(shù)式編程的基本原理阳堕。你會(huì)通過解決編程任務(wù)學(xué)到很多Scala知識(shí)跋理。
- Kojo是一個(gè)使用Scala編程來探索和玩數(shù)學(xué),藝術(shù)恬总,音樂前普,動(dòng)畫和游戲的交互式學(xué)習(xí)環(huán)境。
你的第一行代碼
"Hello World!"程序
作為第一個(gè)示例壹堰,我們使用標(biāo)準(zhǔn)的"Hello World!"程序來說明在對(duì)很多語言知識(shí)不了解的情況下如何使用Scala工具拭卿。
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, world!")
}
}
對(duì)Java程序員來說骡湖,這個(gè)程序的結(jié)構(gòu)應(yīng)該很熟悉,它包含了main
函數(shù)记劈,可以打印"Hello World!"到標(biāo)準(zhǔn)輸出勺鸦。
我們假設(shè)Scala軟件和用戶環(huán)境都已經(jīng)正確設(shè)置好并巍。例如:
環(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 |
|
交互式運(yùn)行
Scala
命令會(huì)啟動(dòng)一個(gè)交互式shell目木,在這里Scala表達(dá)式可以被交互式地解釋執(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
命令會(huì)編譯一個(gè)(或多個(gè))Scala源文件并且生成可以在任何標(biāo)準(zhǔn)JVM上執(zhí)行的Java字節(jié)碼。Scala編譯器和javac
(Java SDK的編譯器)的工作方式類似剃执。
> scalac HelloWorld.scala
默認(rèn)地誓禁,scalac
生成class文件到當(dāng)前的工作路徑中∩龅担可以使用-d
選項(xiàng)來指定一個(gè)不同的輸出路徑摹恰。
> scalac -d classes HelloWorld.scala
執(zhí)行
scala
會(huì)使用合適的選項(xiàng)來執(zhí)行生成的字節(jié)碼:
>scala HelloWorld
scala
允許我們指定命令選項(xiàng),如-classpath
(也可寫為-cp
)選項(xiàng):
>scala -cp classes HelloWorld
scala
命令的參數(shù)必須是一個(gè)頂層對(duì)象怒见。如果對(duì)象擴(kuò)展了scala.App特征俗慈,那么所有包含在這個(gè)對(duì)象中的語句都會(huì)被執(zhí)行,否則你必須添加一個(gè)main
函數(shù)作為程序入口遣耍。
下面是使用App
特征的"Hello, world!"程序:
object HelloWorld extends App {
println("Hello, world!")
}
腳本
我們可能也想讓示例作為shell腳本或者批處理命令運(yùn)行闺阱。
bash shell腳本script.sh
包含下面的Scala代碼:
#!/usr/bin/env scala
object HelloWorld extends App {
println("Hello, world!")
}
HelloWorld.main(args)
可以直接使用shell命令執(zhí)行:
> ./script.sh
注意:我們假設(shè)這里的script.sh
文件有執(zhí)行權(quán)限并且scala
命令的搜索路徑已經(jīng)配置在PATH
環(huán)境變量中了。