Scala Scala編程語言近來抓住了很多開發(fā)者的眼球。如果你粗略瀏覽Scala的網站,,你會覺得Scala是一種純粹的面向對象編程語言,,而又無縫地結合了命令式和函數(shù)式的編程風格。Christopher Diggins認為:
不太久之前編程語言還可以毫無疑義地歸類成“命令式”或者“函數(shù)式”,。Scala代表了一個新的語言品種,,它抹平了這些人為劃分的界限。 根據David Rupp在博客中的說法,,Scala可能是下下一代Java,。這么高的評價讓人不禁想看看它到底是什么東西。 Scala有幾項關鍵特性表明了它的面向對象的本質,。例如,,Scala中的每個值都是一個對象,包括基本數(shù)據類型(即布爾值,、數(shù)字等)在內,,連函數(shù)也是對象。另外,,類可以被子類化,,而且Scala還提供了基于mixin的組合(mixin-based composition)。 與只支持單繼承的語言相比,,Scala具有更廣泛意義上的類重用,。Scala允許定義新類的時候重用“一個類中新增的成員定義(即相較于其父類的差異之處)”。Scala稱之為mixin類組合,。 Scala還包含了若干函數(shù)式語言的關鍵概念,包括高階函數(shù)(Higher-Order Function),、局部套用(Currying),、嵌套函數(shù)(Nested Function)、序列解讀(Sequence Comprehensions)等等,。 Scala是靜態(tài)類型的,,這就允許它提供泛型類、內部類,、甚至多態(tài)方法(Polymorphic Method),。另外值得一提的是,Scala被特意設計成能夠與Java和.NET互操作,。Scala當前版本還不能在.NET上運行(雖然上一版可以-_-b),,但按照計劃將來可以在.NET上運行。 Scala可以與Java互操作。它用scalac這個編譯器把源文件編譯成Java的class文件(即在JVM上運行的字節(jié)碼),。你可以從Scala中調用所有的Java類庫,,也同樣可以從Java應用程序中調用Scala的代碼。用David Rupp的話來說,, 它也可以訪問現(xiàn)存的數(shù)之不盡的Java類庫,,這讓(潛在地)遷移到Scala更加容易。 這讓Scala得以使用為Java1.4,、5.0或者6.0編寫的巨量的Java類庫和框架,,Scala會經常性地針對這幾個版本的Java進行測試。Scala可能也可以在更早版本的Java上運行,,但沒有經過正式的測試,。Scala以BSD許可發(fā)布,并且數(shù)年前就已經被認為相當穩(wěn)定了,。 說了這么多,,我們還沒有回答一個問題:“為什么我要使用Scala?”Scala的設計始終貫穿著一個理念: 創(chuàng)造一種更好地支持組件的語言,。(《The Scala Programming Language》,,Donna Malayeri) 也就是說軟件應該由可重用的部件構造而成。Scala旨在提供一種編程語言,,能夠統(tǒng)一和一般化分別來自面向對象和函數(shù)式兩種不同風格的關鍵概念,。 藉著這個目標與設計,Scala得以提供一些出眾的特性,,包括: * 面向對象風格 * 函數(shù)式風格 * 更高層的并發(fā)模型 Scala把Erlang風格的基于actor的并發(fā)帶進了JVM,。開發(fā)者現(xiàn)在可以利用Scala的actor模型在JVM上設計具伸縮性的并發(fā)應用程序,它會自動獲得多核心處理器帶來的優(yōu)勢,,而不必依照復雜的Java線程模型來編寫程序,。 * 輕量級的函數(shù)語法 o 高階 o 嵌套 o 局部套用(Currying) o 匿名 * 與XML集成 o 可在Scala程序中直接書寫XML o 可將XML轉換成Scala類 * 與Java無縫地互操作 Scala的風格和特性已經吸引了大量的開發(fā)者,比如Debasish Ghosh就覺得: 我已經把玩了Scala好一陣子,,可以說我絕對享受這個語言的創(chuàng)新之處,。 總而言之,Scala是一種函數(shù)式面向對象語言,,它融匯了許多前所未有的特性,,而同時又運行于JVM之上。隨著開發(fā)者對Scala的興趣日增,,以及越來越多的工具支持,,無疑Scala語言將成為你手上一件必不可少的工具。 |
|