Scala是一種現(xiàn)代多范式編程語言响蓉,旨在以簡介琉闪,優(yōu)雅和類型安全的方式來表達(dá)公共編程模式和橙。它集成了面向?qū)ο蠛秃瘮?shù)式編程的特性这难。
Scala是面向?qū)ο蟮?/h1>
Scala是一種純粹的面向?qū)ο笳Z言舟误,從這個(gè)層面上來講,每個(gè)值都是一個(gè)對象雁佳。對象的類型和行為是用類和特征(trait)進(jìn)行描述的脐帝。類可以被子類擴(kuò)展同云,并且使用一種靈活的[基于mixin的組合機(jī)制][2]來替代多重繼承。
Scala是函數(shù)式的
Scala也是一種函數(shù)式語言堵腹,從這個(gè)層面來講炸站,每個(gè)函數(shù)都是一個(gè)值。Scala提供了輕量的語法定義匿名函數(shù)疚顷,支持高階函數(shù)旱易,允許函數(shù)嵌套,并且支持currying腿堤。Scala的case類和對模式匹配的內(nèi)置支持被用于很多函數(shù)式編程語言中阀坏。單例對象提供一種便捷的方式來組織不是類成員的函數(shù)。
另外笆檀,在right-ignoring sequence模式的幫助下忌堂,Scala的模式匹配概念可以自然擴(kuò)展到XML數(shù)據(jù)的處理,方法是對extractor對象進(jìn)行一般擴(kuò)展酗洒。這種情況下士修,for comprehensions對于制定查詢是非常有用的。這些特性讓Scala非常適合開發(fā)類似于web services的應(yīng)用樱衷。
Scala是靜態(tài)類型的
Scala配備了一個(gè)類型系統(tǒng)棋嘲,強(qiáng)制以安全一致的方式靜態(tài)地使用抽象。特別地矩桂,類型系統(tǒng)支持:
局部類型推斷機(jī)制關(guān)注的是用戶不需要用冗余的類型信息注釋程序沸移。綜合來說,這些特性為程序抽象的安全重用和軟件的類型安全擴(kuò)展提供了一個(gè)強(qiáng)大的基礎(chǔ)侄榴。
Scala是可擴(kuò)展的
在實(shí)踐中雹锣,特定應(yīng)用的開發(fā)通常需要特定的語言擴(kuò)展。Scala提供了一種獨(dú)特的語言組合機(jī)制癞蚕,這種機(jī)制可以讓我們非常輕松地以庫的形式添加新的語言結(jié)構(gòu):
上面兩種特性的結(jié)合使用會方便新語句的定義笆制,而不需要擴(kuò)展語法和使用類似宏的元編程。
Scala被設(shè)計(jì)為可以和流行的Java 2 Runtime Environment (JRE)進(jìn)行交互涣达。特別是,與主流面向?qū)ο蟮腏ava編程語言無縫交互证薇。像annotations和Java泛型這些Java新特性在Scala中都有直接的類似特性度苔。那些在Scala存在但在Java中沒有的特性,如默認(rèn)參數(shù)和命名參數(shù)浑度,都盡可能地接近Java進(jìn)行編譯寇窑。Scala和Java有相同的編譯模型(獨(dú)立編譯,動態(tài)類加載)并且能夠訪問大量高質(zhì)量的庫箩张。