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

Scala教程

閱讀(13757) 更新時間(2022-04-19)

Scala 教程 Scala 是一門多范式(multi-paradigm)的編程語言,設計初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。


Scala是一門多范式的編程語言,一種類似java的編程語言,設計初衷是實現(xiàn)可伸縮的語言、并集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性。

第一個Scala程序

以下是用Scala編寫的典型Hello World程序:

實例

 object HelloWorld extends App {
   println("Hello, world!")
 }

運行實例 ?

點擊 "運行實例" 按鈕查看在線實例

實例

object HelloWorld {
   def main(args: Array[String]) {
     println("Hello, world!")
   }
 }

運行實例 ?

點擊 "運行實例" 按鈕查看在線實例

請注意它與Java的Hello World應用程序有哪些相似之處。一處顯著區(qū)別在于,Scala版的Hello World程序不通過static關鍵字把main方法標記為靜態(tài)方法,而是用object關鍵字創(chuàng)建了單件。

假設該程序保存為HelloWorld.scala文件,接下來可以通過以下命令行進行編譯:

> scalac HelloWorld.scala

若要運行:

> scala -classpath . HelloWorld

這與編譯和運行Java的“Hello World”程序是不是很像呢?事實上,Scala的編譯和執(zhí)行模型與Java是等效的,因而它也兼容于Java的構(gòu)建工具,比如Ant.

直接使用Scala解釋器也可以運行該程序,使用選項-i (從文件加載代碼)和選項-e(若要運行額外的代碼,就得實際執(zhí)行HelloWorld對象的方法)即可:

> scala -i HelloWorld.scala -e 'HelloWorld.main(null)'

提示:我們的Scala教程將幫助您學習從初級到高級的Scala知識。如果你有任何疑問,請前往PHP中文網(wǎng)Scala社區(qū)提出你的問題,會有熱心網(wǎng)友為你解答。

Scala特性

支持的編程范式

  • 面向?qū)ο筇匦?/p>

Scala是一種純面向?qū)ο蟮恼Z言,每個值都是對象。對象的數(shù)據(jù)類型以及行為由類和特質(zhì)描述。類抽象機制的擴展有兩種途徑。一種途徑是子類繼承,另一種途徑是靈活的混入機制。這兩種途徑能避免多重繼承的種種問題。

  • 函數(shù)式編程

Scala也是一種函數(shù)式語言,其函數(shù)也能當成值來使用。 Scala提供了輕量級的語法用以定義匿名函數(shù),支持高階函數(shù),允許嵌套多層函數(shù),并支持柯里化。 Scala的case class及其內(nèi)置的模式匹配相當于函數(shù)式編程語言中常用的代數(shù)類型。

更進一步,程序員可以利用Scala的模式匹配,編寫類似正則表達式的代碼處理XML數(shù)據(jù)。在這些情形中,列表推導式功能對編寫公式化查詢非常有用。

由于JVM不支持尾部遞歸,Scala也不能完全支持尾部遞歸優(yōu)化。不過,Scala編譯器可以把某些簡單的尾遞歸優(yōu)化成循環(huán)。

以下代碼以函數(shù)式風格實現(xiàn)了快速排序算法,可以與Erlang快速排序的例子做個比較:

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),通過編譯時檢查,保證代碼的安全性和一致性。類型系統(tǒng)具體支持以下特性:

  • 泛型類別,

  • 協(xié)變和逆變,

  • 標注,

  • 類型參數(shù)的上下限約束,

  • 把類別和抽象類型作為對象成員,

  • 復合類型,

  • 引用自己時顯式指定類型,

  • 視圖,

  • 多態(tài)方法。

擴展性

Scala的設計秉承一項事實,即在實踐中,某個領域特定的應用程序開發(fā)往往需要特定于該領域的語言擴展。Scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫添加新的語言結(jié)構(gòu):

  • 任何方法可用作前綴或后綴操作符,

  • 可以根據(jù)預期類型自動構(gòu)造閉包。

聯(lián)合使用以上兩個特性,使你可以定義新的語句而無須擴展語法也無須使用宏之類的元編程特性。

并發(fā)性

Scala使用Actor作為其并發(fā)模型,Actor是類似線程的實體,通過郵箱發(fā)收消息。Actor可以復用線程,因此可以在程序中可以使用數(shù)百萬個Actor,而線程只能創(chuàng)建數(shù)千個。在2.10之后的版本中,使用Akka作為其默認Actor實現(xiàn)。[20] 以下代碼是使用Actor模式的EchoServer實現(xiàn)

val echoServer = actor(new Act {
  become {
    case msg => println("echo " + msg)
  }
})
echoServer ! "hi"

Actor模式可以簡化并發(fā)編程,好利用多核CPU的能力。

本Scala教程手冊涵蓋的內(nèi)容

本Scala教程涵蓋所有Scala基礎和高級知識,包含了Scala基礎語法、Scala數(shù)據(jù)類型、Scala變量、Scala運算符、Scala函數(shù)、Scala字符串、Scala類和對象等等所有Scala初高級知識介紹。

提示:本教程的每一章都包含了很多Scala實例,您可以直接點擊?"運行實例"?按鈕在線查看結(jié)果。這些例子將幫助您更好地理解和運用Scala。


最新章節(jié)


Scala 文件 I/O 2016-10-18
Scala 提取器(Extractor) 2016-10-18
Scala 異常處理 2016-10-18
Scala 正則表達式 2016-10-18
Scala 模式匹配 2016-10-18
Scala Trait(特征) 2016-10-18
Scala 類和對象 2016-10-18
Scala Iterator(迭代器) 2016-10-18