国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Scala教程

閱讀(13738) 更新時(shí)間(2022-04-19)

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í)例

#或

實(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。


#