【クロージャー】
Clojure(クロージャー) とは?
最終更新:
💡 変わらないデータが、並行処理を変える
JVM上で動作するLisp方言の関数型プログラミング言語。イミュータブルデータと並行処理のしやすさが特徴。
📌 このページのポイント
- JVM上で動くLisp方言で、Javaのライブラリを活用できる
- 標準コレクションは不変で、更新すると元の値を残した新しい値を得る
- REPLで式を評価し、実行中のプログラムやデータを対話的に確かめられる
- ClojureScriptはJavaScriptを出力する別の実装で、ブラウザなどを対象にする
ClojureってLispの仲間なの?括弧が多いね。
イミュータブルってなんで大事なの?
でもデータが変わらないと、更新はどうするの?
元の値を残し、変更を反映した新しい値を得るよ。永続データ構造は、変わらない部分を内部で共有することで、毎回すべてをコピーせずに更新できる。「永続」はここでは以前の版も使えるという意味で、ファイルへの保存のことではないんだ。
変化する状態は持てないの?
持てるよ。値と、その時点の値を指す参照を分けて考えるんだ。参照の更新にはClojureが用意する仕組みを使う。不変のコレクションがあるだけで、アプリ全体の並行処理が自動的に安全になるわけではないよ。
REPL駆動開発って何をするの?
式を少しずつ評価し、データを調べたり関数を定義し直したりして、動作を確かめながら開発するよ。REPLはRead・Eval・Print・Loopの略。ClojureScriptでも似た書き方を使えるけれど、実行先はJavaScriptなので、JVM用のJavaライブラリがそのまま使えるわけではないんだ。
まとめ:ざっくりこれだけ覚えればOK!
「Clojure」って出てきたら「JVM上で動き、不変のデータを重視する関数型言語」と思えばだいたいOK!
📖 おまけ:英語の意味
「Clojure」 = closureをもじり、C・L・Jを含めた名称
💬 開発者Rich Hickeyは、closure(クロージャ)と同じ発音にし、C(CLR)・L(Lisp)・J(JVM)を含む名前にしたと説明しているよ。