【クロージャー】

Clojure(クロージャー) とは?

💡 変わらないデータが、並行処理を変える
📌 このページのポイント
イミュータブルデータ構造(永続データ構造) ❌ ミュータブル(従来) [A, B, C] [A, X, C] 上書き! 元のデータが消える → 並行処理で危険 ✅ イミュータブル(Clojure) [A, B, C] [A, B, C] 元のまま [A, X, C] 新しい版 永続データ構造の仕組み → 構造共有 A B 共有 根' A X Aは共有、Xだけ新規
Clojureのイミュータブルデータ構造のイメージ
ひよこ ひよこ

ClojureってLispの仲間なの?括弧だらけで読みにくそう…

ペンギン先生 ペンギン先生

たしかに括弧は多いけど、慣れると括弧のおかげでコードの構造が明確になるんだ。エディタのサポートも充実していて、括弧の対応を自動で管理してくれるから、実際にはそこまで困らないよ

ひよこ ひよこ

イミュータブルってなんで大事なの?

ペンギン先生 ペンギン先生

データが変わらないということは、複数のスレッドが同じデータを同時に読んでも安全ということなんだ。普通の言語だと「このデータ、他のスレッドが書き換えてないかな?」と心配しないといけないけど、Clojureではそもそもデータが変わらないから、その心配がいらないんだよ

ひよこ ひよこ

でもデータが変わらないと、更新はどうするの?

ペンギン先生 ペンギン先生

元のデータはそのままで、変更部分だけが違う新しいデータを作るんだ。「永続データ構造」という仕組みで、内部的にはデータを共有しているから、毎回全コピーするわけじゃなくて効率的だよ

ひよこ ひよこ

JVM上で動くメリットって何?

ペンギン先生 ペンギン先生

Javaの膨大なライブラリをそのまま使えるのが最大のメリットだね。企業で長年蓄積されたJava資産を活かしつつ、関数型のスタイルで開発できる。実際にアメリカの金融業界やウォルマートなどの大企業で採用されているよ

ひよこ ひよこ

REPL駆動開発って普通のREPLと違うの?

ペンギン先生 ペンギン先生

Clojureでは動いているアプリケーションにエディタから直接コードを送り込んで、その場で動作を変えられるんだ。サーバー再起動せずに関数を書き換えたりデータを確認したりできて、開発効率がとても高い。一度体験すると他の言語に戻れないという人も多いんだよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Clojure」って出てきたら「JVM上で動く、データが変わらない関数型言語」と思えればだいたいOK!
📖 おまけ:英語の意味
「Clojure」 = closure(クロージャ)+ Java のJをもじった造語
💬 プログラミングの「クロージャ」とJavaの「J」を組み合わせた造語だよ。C・L・J(CLJ)の3文字にはC#・Lisp・Javaへのリスペクトも込められているんだ
← 用語集にもどる