Scala編程語言抓住了不少開發者的眼球。若是你粗略瀏覽Scala的網站,你會以爲Scala是一種純粹的 面向對象編程語言,而又無縫地結合了命令式編程和 函數式編程風格。Christopher Diggins認爲:編程
不過久以前編程語言還能夠毫無疑意地歸類成「命令式」或者「函數式」或者「面向對象」。Scala表明了一個新的語言品種,它抹平了這些人爲劃分的界限。併發
根據David Rupp在博客中的說法,Scala多是下一代Java。這麼高的評價讓人不由想看看它究竟是什麼東西。框架
Scala有幾項關鍵特性代表了它的面向對象的本質。例如,Scala中的每一個值都是一個對象,包括基本數據類型(即布爾值、數字等)在內,連函數也是對象。另外,類能夠被子類化,並且Scala還提供了基於mixin的組合(mixin-based composition)。編程語言
與只支持單繼承的語言相比,Scala具備更普遍意義上的類重用。Scala容許定義新類的時候重用「一個類中新增的成員定義(即相較於其父類的差別之處)」。Scala稱之爲mixin類組合。函數式編程
Scala還包含了若干函數式語言的關鍵概念,包括高階函數(Higher-Order Function)、局部套用(Currying)、 嵌套函數(Nested Function)、序列解讀(Sequence Comprehensions)等等。函數
Scala是靜態類型的,這就容許它提供 泛型類、 內部類、甚至 多態方法(Polymorphic Method)。另外值得一提的是,Scala被特地設計成可以與 Java和 .NET互操做。Scala當前版本還不能在.NET上運行(雖然上一版能夠-_-b),但按照計劃未來能夠在.NET上運行。工具
Scala能夠與Java互操做。它用scalac這個 編譯器把 源文件編譯成Java的 class文件(即在JVM上運行的 字節碼)。你能夠從Scala中調用全部的Java類庫,也一樣能夠從Java應用程序中調用Scala的代碼。用David Rupp的話來講,測試
它也能夠訪問現存的數之不盡的Java類庫,這讓(潛在地)遷移到Scala更加容易。網站
這讓Scala得以使用爲Java1.四、5.0或者6.0編寫的巨量的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語言將成爲你手上一件必不可少的工具。
內容詳情:https://www.roncoo.com/course/view/bbd372aa876e4d7aa37e533a45bf7bf2