之劍 2016.5.4 23:55:19javascript
<!--目錄-->css
<div id="category"></div>前端
Object-Oriented Meets Functional---當面向對象趕上函數式:java
Have the best of both worlds. Construct elegant class hierarchies for maximum code reuse and extensibility, implement their behavior using higher-order functions. Or anything in-between.jquery
支持面向對象編程範式git
支持函數式編程範式程序員
語法動態簡潔表達力豐富github
具有靜態強類型和豐富的泛型web
Scala,一個可擴展的語言.編程
Scala精心整合了面向對象和函數式編程語言。
Scala是純種的面向對象的語言。從概念上講,每個值都是一個對象,每個操做都是一個方法調用。語言支持經過類和特徵的高級組件架構。
面向對象編程是一種自頂向下的程序設計方法.萬事萬物都是對象,對象有其行爲(方法),狀態(成員變量,屬性).
許多傳統的設計模式Scala已經原生支持。單例模式對應object對象定義,訪問者經過模式匹配支持。使用隱式類,Scala甚至容許你對現有類型類進行操做,不管他們來自Scala或java!
Scala也是骨子裏透着函數式編程範式的語言。函數是一等公民(固然,這個在你使用面向對象編程範式風格的時候,這個函數公民也只能退後了),不可變數據結構庫等。不變性有助於編寫併發程序.
函數式編程方法經過組合和應用函數來構造邏輯系統.函數式編程傾向於把軟件分解爲其須要執行的行爲或操做,並且一般採用自底向上的方法.同時,函數式編程也提供了很是強大的對事物進行抽象和組合的能力.
Scala不執拗己見;你能夠自由使用任何你喜歡的風格。面對有多種不一樣需求的問題領域,你能夠在一個解決方案的不一樣部分,採用最適合的編程方法.
除了命令式,函數式,還有哪些其餘的編程範式?
Scala在JVM上運行。java和Scala類能夠自由地混合,不管他們居住在不一樣項目或同一項目。Scala能夠自由使用java庫、框架和工具。像Ant或Maven工具,IDE如Eclipse或NetBeans,框架,IntelliJ,Spring。
Scala能夠運行在全部常見的JVM, 固然還有Android OS。
甚至,Scala都想把前端JavaScript的事情也給幹了.
Scala社區是java生態系統的重要組成部分。流行的Scala框架,包括Akka, Finagle, and the Play web framework include dual APIs for Java and Scala.
函數式編程的思想是開發一個小的核心結構,可結合靈活的方式,而後進行組合。
Scala particularly shines when it comes to scalable server software that makes use of concurrent and synchronous processing, parallel utilization of multiple cores, and distributed processing in the cloud.
將來Scala在可伸縮的服務器軟件,利用並行和同步處理,多核並行使用,在雲計算的分佈式處理等領域將大放異彩。
Its functional nature makes it easier to write safe and performant multi-threaded code. There’s typically less reliance on mutable state and Scala’s futures and actors provide powerful tools for organizing concurrent system at a high-level of abstraction.
每一次「揚棄」都拋棄了一些非本質特徵而提煉出更普適的精髓特徵,於是每一次抽象都是在透過現象看本質,每一次提煉都是一次質的飛躍和昇華,從而使由此獲得的新理論更具廣泛性與包容性。例如量子力學不只能解釋經典力學的各類現象,還能解釋微觀世界裏特有的(不能被經典力學或經典電動力學解釋的)現象,如AB效應。
曾經我很迷戀幾何(各類奇妙曲線和曲面),就像當初迷戀普通物理(各類奇妙現象);如今我轉向理論物理,更願意從純理性的角度去思考一些本質(透過現象看本質),對數學也於是更偏重代數。代數和理論物理的美是內斂的,就像那種內斂的人,長得很抽象,你不去接近她而只是從外部看看,就不會發現她的魅力所在。
從直角三角形的直觀,到勾股定理的抽象,再到三角函數的演繹,再到傅里葉變換,小波變換,都是思惟層次一步步的高層抽象.
抽象有什麼好?抽象可使理論更加普適。什麼歐式幾何、仿射幾何、射影幾何、微分幾何… 林林總總,眼花繚亂。它們之間就沒有聯繫嗎?有!不識幾何真面目,只緣身在幾何中——必須從幾何中跳出來,才能旁觀者清。這個旁觀者就是代數。
1872年,德國數學家Klein在Erlangen大學的報告中指出,一種幾何學能夠用公理化方法來構建,也能夠把變換羣和幾何學聯繫起來,給幾何學以新的定義:
給出集合S和它的一個變換羣G,對於S中的兩個集合A和B,若是在G中存在一個變換f使f(A)=B,則稱A和B等價。
能夠根據等價關係給集合分類,凡是等價的子集屬於同一類,不等價的子集屬於不一樣的類。將這一代數理論翻譯到幾何中,相應的版本即是:
集合S叫作空間,S的元素叫作點,S的子集A和B叫作圖形,凡是等價的圖形都屬於同一類(圖形等價類)。
因而同一類裏的一切圖形所具備的幾何性質必是變換羣G下的不變量,於是可用變換羣來研究幾何學——這就是著名的Erlangen綱領,它支配了自它以來半個世紀的全部幾何學的研究。
例如,在正交變換羣下保持幾何性質不變的即是歐式幾何,在仿射變換羣下保持不變的即是仿射幾何,在射影變換羣下保持不變的即是射影幾何,在微分同胚羣下保持不變的即是微分幾何。
上面說的是圖形等價關係。代數的廣泛性在於,它將各類各樣的相關的、不相關的事物放在一塊兒比較,而後從這些個性的事物中提煉出共性的東西來,好比等價關係。除了上面提到的圖形等價關係,還有各類各樣的等價關係(如同「羣公理:只要知足能封閉、可結合、有恆元和逆元的集合就是羣」同樣,只要知足反身、對偶、傳遞這三條的關係就是等價關係——這樣簡單的條件固然很容易知足,‘曲不高則和不寡’,因此相似的例子不勝枚舉)
例如,同餘等價關係。咱們能夠按餘數給整數分類,餘數相同的歸爲一類,即同餘類。
代數對於廣泛性的追求在於,發現同餘類後並不就此止步,而是精益求精,進一步去提煉更具廣泛性的概念。
既然等價的圖形和等價的餘數均可以歸爲等價類,何不將等價類作成一個集合呢?由此,又發現了商集(即在一個集合中給定了一個等價關係以後相對於這個等價關係而言的等價類所構成的集合,通俗地說就是將每個等價類中全部點「粘合」爲一個點而獲得的集合,如Möbius帶和Klein瓶)、商空間(以同餘類爲元素構成的集合)、商羣(以陪集爲元素構成的集合)。
剛纔說了等價關係。相似的例子還有不少,再好比說基矢。只要同類的一組元素互不相關,就能充當空間的一組基(將一個量展開爲其餘量的線性組合,此即泛函分析中的譜定理),哪怕它不是向量(於是生成的不是幾何空間)也無所謂,好比它能夠是一組函數(由今生成無限維空間,如量子力學中的Hilbert空間)。甚至,它能夠是一個不肯定(如無窮小量,要多小有多小但又不是零,到底多大隻有上帝清楚)的微分元(好比dx、dy、dz,微分幾何中用到的外微分形式就是用這些微分元爲基矢張成的空間——微分幾何運算很複雜,但構成它的理論基礎之一Grassmann代數並非特別複雜)。
代數的理論是至關普適的。由於它老是經過不斷的抽象來提煉更加基本的概念。
用哲學的話說,即是從具體到抽象,從特殊到通常(例如兩個羣,不論它們的元素多麼地不一樣,只要運算性質相同,彼此就是同構的,而且能夠所以認爲是相同的代數對象而不加區別;不論膨脹、收縮、轉動、反演…均可以統一塊兒來,那就是指數函數;不論弦振動、聲音、流體、電磁波…均可以統一塊兒來,它們在數學中都是雙曲型方程)。
每一次抽象都是一次「揚棄」(留其精髓,去其平庸)的過程。
好比將「距離」概念抽象化而提煉出「單比」概念,進一步將「單比」抽象化而提煉出「交比」概念,因而,從歐式幾何中捨棄「距離不變」而保留更廣泛的「單比不變」,獲得仿射幾何;從仿射幾何中捨棄「單比不變」而保留更廣泛的「交比」,獲得通常的射影幾何。
從歐式空間(長度,夾角)到內積空間(模,不嚴格的夾角)再到賦範空間(範,徹底拋棄夾角)也是如此,不斷的改良(抽象、提煉),一改再改,但最終改到不能再改時,就完成了一個革命——甚至連範數(最熟悉於是最不肯拋棄的度量或度規)也拋棄了,從不嚴格的距離發展到不肯定的距離(鄰域δ,就像前面提到的無窮小量同樣不肯定),獲得了里程碑式的「拓撲空間」的概念——有史以來最普遍最深入的革命!
經由歐式空間的連續函數抽象出度量空間的連續映射,一直到抽象出拓撲空間中的同胚映射,在數學史上經歷了很長時間才完成。無獨有偶,物理學史也是如此。且不說從經典力學到相對論、量子力學(這個過程想必你們都聽膩了),單說相對論自己也是如此。
Einstein說:「爲何從狹義相對論發表到廣義相對論創建又經歷了7年那麼長時間?主要緣由是,要擺脫座標必須有直接度量意義這個舊概念是不容易的」。
看來,物理學家和數學家都遇到了擺脫「度量」概念的困難,在擺脫舊概念走向新理論這一點上物理學界和數學界是相通的(數學界走向了拓撲學,物理學界走向了廣義相對論)。
關於做者: 陳光劍,江蘇東海人, 號行走江湖一劍客,字之劍。程序員,詩人, 做家
<link rel="stylesheet" href="http://yandex.st/highlightjs/6.2/styles/googlecode.min.css">
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script src="http://yandex.st/highlightjs/6.2/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script type="text/javascript">
$(document).ready(function(){
$("h2,h3,h4,h5,h6").each(function(i,item){ var tag = $(item).get(0).localName; $(item).attr("id","wow"+i); $("#category").append('<a class="new'+tag+'" href="#wow'+i+'">'+$(this).text()+'</a></br>'); $(".newh2").css("margin-left",0); $(".newh3").css("margin-left",20); $(".newh4").css("margin-left",40); $(".newh5").css("margin-left",60); $(".newh6").css("margin-left",80); });
});
</script>