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