相比咱們傳統的 c ,java ,python ,javascript等,Clojure的語法比較特別,初一看,還可能會有些不適應。javascript
本文來介紹下Clojure的語法特色。java
1、表達式python
全部的Clojure代碼都是由表達式組成的,每一個表達式都會產生一個值。c++
常見的表達式如:編程
60數據結構
[2 4 6]函數
(+ 1 2)ip
(average [2 3 4])字符串
1)上面的第一個表達式就是一個字面常量,這裏是一個整數。io
2)第二個是個整數序列。
3)第3和4 都是函數調用,Clojure中,小括號 () 表示函數調用,括號中的第一個值是函數名,剩下的值是參數,整個調用表達式被求值的結果做爲調用的返回值。
在Clojure中,相似其它語言的運算符,均可以看作是函數,這也爲什麼上面例子中的 (+ 1 2) 這個表達式中 + 號放在前面的緣由。
2、常量
一、布爾: true false 注意是區分大小寫的
二、字符串:同java同樣,雙引號擴起,就是 java.lang.String類型,如:
user=> (instance? java.lang.String "asd")
true
三、nil : 同 java中的null,python中的None。若是用在條件判斷中,則爲false
3、函數定義和調用
在Clojure中,經過defn 來定義函數,其實defn也是一個函數,只不過是Clojure中的內置函數罷了。
如:
(defn hello [a b] (+ a b))
上面代碼定義了函數hello,有兩個參數 a 和 b, 函數體是一個求兩個參數和的語句,求和結果做爲調用 hello函數的返回值。
函數體也能夠有多個語句,最後一個語句的求值做爲函數的返回值,如
user=> (defn hello [a b] (+ a b) (* a b)) //定義函數
user=> (hello 3 4) //調用函數
12
在java等語言中,調用函數的語法是:methodName(arg1, arg2, arg3);
在Clojure中,調用函數的方式是 :(function-name arg1 arg2 arg3)
說明:在cloure中,函數名習慣所有是小寫字母,若是有多個單詞,則單詞之間以-鏈接,這點同java的習慣不一樣(java採用駝峯式的方式)。
4、Clojure代碼的處理過程
分爲三個階段:
一、read階段: 讀取源代碼,造成一個數據結構
二、compile階段:上面的數據結構編程java字節碼
三、run階段:字節碼被執行
5、與其它語言的差異
相比其它的語言,如c /c++ ,java, python等,Clojure語言有幾個顯著的特色和差別。
大量使用() 和 符號前置,如 (+ 2 3) //這讓不少人不習慣
一、沒有變量的概念
沒法向其它語言同樣,能夠聲明一個變量,而後後續使用這個變量
一、