Clojure入門(1)

clojure 是一門函數式語言。java

目前主流編程語言可能是「命令式」語言 (imperative language),如:java,c++c++

命令式語言強調「語句」和「流程控制」,讓機器按照咱們預設的邏輯路線來運轉。編程

函數式語言並不是當今主流,它更強調「因果關係」,一個純函數對特定的輸入老是給出特定的輸出結果。安全

經過函數間的組合,能夠提供強大的功能。併發

函數式的風格,更易於程序的維護。由於咱們很容易經過現象逐步追蹤其緣由。編程語言

 

從發展趨勢上看:並行,分佈式,多cpu愈來愈普及。主流語言在對待這些變化上事倍功半,有點力不從心。分佈式

得益於此契機,近些年,函數式語言有捲土重來的意思。函數

函數式的語言特色之一是:通常狀況下,程序的執行結果對執行順序並不敏感,這對分佈式執行十分有利。優化

 函數式的另外一特色:崇尚「不變性」。因「不變」,就能夠安全共享,而不須要「鎖」等複雜同步機制,於是在併發中優點明顯。spa

 

函數式或崇尚函數式的語言不少,最古老的Lisp系列,學究式的 Haskell, ML家族的Ocaml

煊赫一時的scala,它特性衆多,功能豐富,有不少前衛的設計,聽說有取代java的潛力。它是多範式語言,也支持函數式風格。

但這裏介紹的是:至簡而務實的 clojure

 

clojure很簡,整個語言就是一個 clojure-xxxx.jar 文件,發展了近10年,仍只有大約3M。

函數式的共同特性是:

  1. 崇尚「純函數」,就是沒有反作用,對特定的輸入,永遠是相同的輸出。

  2. 「函數」是一等公民。能夠同int string 類型的變量同樣做爲參數傳遞,做爲返回值,

    也能夠說,支持高階函數特性。

  3. 使用不變的「數據」,而非「變量」

    這個好處不少,能夠很容易地處理併發,無「鎖」的困擾

  4. 關注點在「變換」以及「變換的組合」,這是關注「動詞」,而非面向對象王國裏的「名詞」--即對象。有人稱之爲「動詞的復仇」

 

clojure 很務實,沒有清高地暢遊於數學世界,沉醉於理論上的完美,而是選擇了JVM爲宿主,

雖然這會讓它多少受限於JVM的特性(好比JVM不支持尾遞歸優化);

JVM宿主的好處多多:clojure能夠像調用自身函數同樣簡單地操控java類庫中的類、對象、方法。

java能作得很好的事,clojure就再也不從新發明,至可能是包裝一下,爲了更好組合。

clojure強調「不變性」,但並不拒絕偶爾使用「變量」

clojure強調「純函數」,但不拒絕必要的「反作用」(好比調試的打印)

clojure崇尚「惰性求值」,但並不強迫你必須如此。

 

最後,clojure是一種Lisp的方言,在JVM上的Lisp方言。

它保持了Lisp的強大,而且更簡潔。

 

即使永遠都不用它,其設計理念,內中哲學絕對值得品味!

相關文章
相關標籤/搜索