Scala 教程 Scala 是一門多范式(multi-paradigm)的編程語言,設(shè)計(jì)初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。
Scala是一門多范式的編程語言,一種類似java的編程語言,設(shè)計(jì)初衷是實(shí)現(xiàn)可伸縮的語言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。
第一個(gè)Scala程序
以下是用Scala編寫的典型Hello World程序:
實(shí)例
object HelloWorld extends App { println("Hello, world!") }
運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
或
實(shí)例
object HelloWorld { def main(args: Array[String]) { println("Hello, world!") } }
運(yùn)行實(shí)例 ?
點(diǎn)擊 "運(yùn)行實(shí)例" 按鈕查看在線實(shí)例
請(qǐng)注意它與Java的Hello World應(yīng)用程序有哪些相似之處。一處顯著區(qū)別在于,Scala版的Hello World程序不通過static關(guān)鍵字把main方法標(biāo)記為靜態(tài)方法,而是用object關(guān)鍵字創(chuàng)建了單件。
假設(shè)該程序保存為HelloWorld.scala文件,接下來可以通過以下命令行進(jìn)行編譯:
> scalac HelloWorld.scala
若要運(yùn)行:
> scala -classpath . HelloWorld
這與編譯和運(yùn)行Java的“Hello World”程序是不是很像呢?事實(shí)上,Scala的編譯和執(zhí)行模型與Java是等效的,因而它也兼容于Java的構(gòu)建工具,比如Ant.
直接使用Scala解釋器也可以運(yùn)行該程序,使用選項(xiàng)-i (從文件加載代碼)和選項(xiàng)-e(若要運(yùn)行額外的代碼,就得實(shí)際執(zhí)行HelloWorld對(duì)象的方法)即可:
> scala -i HelloWorld.scala -e 'HelloWorld.main(null)'
提示:我們的Scala教程將幫助您學(xué)習(xí)從初級(jí)到高級(jí)的Scala知識(shí)。如果你有任何疑問,請(qǐng)前往PHP中文網(wǎng)Scala社區(qū)提出你的問題,會(huì)有熱心網(wǎng)友為你解答。
Scala特性
支持的編程范式
面向?qū)ο筇匦?/p>
Scala是一種純面向?qū)ο蟮恼Z言,每個(gè)值都是對(duì)象。對(duì)象的數(shù)據(jù)類型以及行為由類和特質(zhì)描述。類抽象機(jī)制的擴(kuò)展有兩種途徑。一種途徑是子類繼承,另一種途徑是靈活的混入機(jī)制。這兩種途徑能避免多重繼承的種種問題。
函數(shù)式編程
Scala也是一種函數(shù)式語言,其函數(shù)也能當(dāng)成值來使用。 Scala提供了輕量級(jí)的語法用以定義匿名函數(shù),支持高階函數(shù),允許嵌套多層函數(shù),并支持柯里化。 Scala的case class及其內(nèi)置的模式匹配相當(dāng)于函數(shù)式編程語言中常用的代數(shù)類型。
更進(jìn)一步,程序員可以利用Scala的模式匹配,編寫類似正則表達(dá)式的代碼處理XML數(shù)據(jù)。在這些情形中,列表推導(dǎo)式功能對(duì)編寫公式化查詢非常有用。
由于JVM不支持尾部遞歸,Scala也不能完全支持尾部遞歸優(yōu)化。不過,Scala編譯器可以把某些簡(jiǎn)單的尾遞歸優(yōu)化成循環(huán)。
以下代碼以函數(shù)式風(fēng)格實(shí)現(xiàn)了快速排序算法,可以與Erlang快速排序的例子做個(gè)比較:
def qsort(list: List[Int]): List[Int] = list match { case Nil => Nil case pivot :: tail => val(smaller, rest) = tail.partition(_ < pivot) qsort(smaller) ::: pivot :: qsort(rest) }
靜態(tài)類型
Scala具備類型系統(tǒng),通過編譯時(shí)檢查,保證代碼的安全性和一致性。類型系統(tǒng)具體支持以下特性:
泛型類別,
協(xié)變和逆變,
-
標(biāo)注,
類型參數(shù)的上下限約束,
把類別和抽象類型作為對(duì)象成員,
復(fù)合類型,
引用自己時(shí)顯式指定類型,
視圖,
多態(tài)方法。
擴(kuò)展性
Scala的設(shè)計(jì)秉承一項(xiàng)事實(shí),即在實(shí)踐中,某個(gè)領(lǐng)域特定的應(yīng)用程序開發(fā)往往需要特定于該領(lǐng)域的語言擴(kuò)展。Scala提供了許多獨(dú)特的語言機(jī)制,可以以庫(kù)的形式輕易無縫添加新的語言結(jié)構(gòu):
任何方法可用作前綴或后綴操作符,
可以根據(jù)預(yù)期類型自動(dòng)構(gòu)造閉包。
聯(lián)合使用以上兩個(gè)特性,使你可以定義新的語句而無須擴(kuò)展語法也無須使用宏之類的元編程特性。
并發(fā)性
Scala使用Actor作為其并發(fā)模型,Actor是類似線程的實(shí)體,通過郵箱發(fā)收消息。Actor可以復(fù)用線程,因此可以在程序中可以使用數(shù)百萬個(gè)Actor,而線程只能創(chuàng)建數(shù)千個(gè)。在2.10之后的版本中,使用Akka作為其默認(rèn)Actor實(shí)現(xiàn)。[20] 以下代碼是使用Actor模式的EchoServer實(shí)現(xiàn)
val echoServer = actor(new Act { become { case msg => println("echo " + msg) } }) echoServer ! "hi"
Actor模式可以簡(jiǎn)化并發(fā)編程,好利用多核CPU的能力。
本Scala教程手冊(cè)涵蓋的內(nèi)容
本Scala教程涵蓋所有Scala基礎(chǔ)和高級(jí)知識(shí),包含了Scala基礎(chǔ)語法、Scala數(shù)據(jù)類型、Scala變量、Scala運(yùn)算符、Scala函數(shù)、Scala字符串、Scala類和對(duì)象等等所有Scala初高級(jí)知識(shí)介紹。
提示:本教程的每一章都包含了很多Scala實(shí)例,您可以直接點(diǎn)擊?"運(yùn)行實(shí)例"?按鈕在線查看結(jié)果。這些例子將幫助您更好地理解和運(yùn)用Scala。
最新章節(jié)
- Scala 文件 I/O 2016-10-18
- Scala 提取器(Extractor) 2016-10-18
- Scala 異常處理 2016-10-18
- Scala 正則表達(dá)式 2016-10-18
- Scala 模式匹配 2016-10-18
- Scala Trait(特征) 2016-10-18
- Scala 類和對(duì)象 2016-10-18
- Scala Iterator(迭代器) 2016-10-18
相關(guān)課程
- 最新ThinkPHP 5.1全球首發(fā)視頻教程(60天成就PHP大牛線上培訓(xùn)班課) 2022-02-17
- 簡(jiǎn)單聊聊PHP創(chuàng)業(yè)那點(diǎn)事 2023-01-04
- 大型實(shí)戰(zhàn)天龍八部之開發(fā)Mini版MVC框架仿糗事百科網(wǎng)站 2018-01-25
- 登錄驗(yàn)證與經(jīng)典留言板 2018-03-02
- PHP實(shí)戰(zhàn)開發(fā)極速入門: PHP快速創(chuàng)建[小型商業(yè)論壇] 2022-06-28
- 快速入門Node.JS全套完整版 2022-09-30
- 自己動(dòng)手寫 PHP MVC 框架(40節(jié)精講/巨細(xì)/新人進(jìn)階必看) 2022-12-08
- 馬士兵spring視頻教程 2022-04-12