Clojureに触る機会があり、書き方が他の言語と異なっていたため簡単に纏めておく。
変数の定義
他の言語では
他の言語では以下のように書くことが多く、見慣れていると思う。
int sample_variable = value;
Clojureでは
Clojureでは、以下のように変数定義を書くことになる。
(def sample-variable value)
intなどデータ型の記載が存在せず、defと書くことになる。
defとは
Clojureで使用するdefとは、関数名や変数名を定義するとき使用する宣言。
他の宣言としてはfnやdefnなどがあり、それぞれ以下の場合に使用する。
・fnは関数の処理を記載する場合に使用する。関数名の定義はしない
・defnは、def+fnのような宣言。関数名定義と関数の処理を記載する際に使用する
関数の定義
関数の定義の記載方法について、引数なしと引数あり場合で纏めていく。
他の言語では
他言語の記載例としては、中括弧を使用して処理を記載する場合が多い。
int sample_function() {
処理
}
int sample_function(int arg1, int arg2) {
処理
}
Clojureでは
一方Clojureでは、中括弧を使用せずに
(defn sample-function
[]
(処理)
)
(defn sample-function
[arg1, arg2]
(処理)
)
と書く。
関数への引数の渡し方
他の言語では
他の言語だと以下のような形で引数を渡す形が多いと思う。
sample_function(arg1, arg2);
Clojureでは
Clojureでは、以下のように引数を渡すことになる。
(sample-function arg1 arg2)
関数の返り値を別の関数に渡す方法
他の言語では
関数の返り値を別の関数に渡す場合、他の言語では以下のような書き方で渡すことになる。
arg1 = sample_function1();
sample_function2(arg1, arg2);
sample_function2(sample_function1(), arg2);
Clojureでは
Clojureでは以下のように返り値を渡す。
((def arg1 sample-function1)
(sample-function2 arg1 arg2))
シングルアロー(->)を使用することで以下のように書くこともできる。
(->(sample-function1)
(sample-function2 arg2))
HelloWorld
標準出力にHello Worldを出すときは、以下のように書く。
(println "Hello World!")