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