【クロージャー】

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へのリスペクトも込められているんだ
← 用語集にもどる