Clojureの面白さ
先月からゲーム開発に注力するようになり、普段からClojureScriptを書く生活が連続して、かつNoteで書くことも習慣化できてきました。
そこで一旦改めて、というか立ち返って、Clojure(Script)でコードを書いている理由についてカジュアルに書いておきたいと思います。
これはニャンパスという会社を立ち上げた時から一貫しているのですが、Clojureでコードを書くことは面白い点で、具体的には関数型プログラミングしての楽しさ、マクロを書ける柔軟性あたりが個人的な理由として大きいなという印象です。
まず関数型プログラミングであるという点については、割合と世のソフトウェアエンジニアにもそのメリットが広がっている実感はあります。個人的にそれを言葉にしようとする時分かりやすいのは、手続き型の言語、オブジェクト指向の言語と比べると副作用が少ない点です。精神的安心感がありますし、テストもしやすいです。
関数型プログラミング言語はClojure以外に割合と多くありますので、先ほどのメリットの話はそれら言語に適用できると思いますが、そこにさらにマクロが使える言語で実用的な言語は少なくなります。
この機能はパワフルで、自分自身で言語そのものを拡張できるのは他の言語と比べ優位だと感じており、以前書籍にも書いた例ですが、分かりやすいと思うので簡単に紹介します。Rubyにはifの反対の記法として、unlessというのがあり、条件が偽である時に実行するというような形で使えます。
このunlessですが、Clojureには存在しないのですが、そのunlessをマクロを使うことで定義するととができいかがその定義です。
(defmacro unless
[test & body]
`(if (not ~test)
(do ~@body)))
と定義するだけで、
(unless false
(prn "hogehoge")
のように実行することができ、想定通りに動きます。
この辺の話は、僕自身色々経験をしてきた中で長々と説明してもそれに比例して響くというものではなく、短い紹介だけでも気になる人は自分で調べて興味を持つという感触を経ているので、少しでも気になった方はぜひClojureの世界に飛び込んでみてください。
Javaの実行環境、JavaScriptの実行環境で動きますし、現に昨年末にプログラミングが学べるゲーム開発を作り始めて以来触っているPhaser.jsはClojureScriptで書いています。(その中でマクロも使っています。)
と、そんな個人的に激推しな言語ですので、冬季休暇の合間に触ったりしてもらうのはいかがでしょうという、新年初めての記事でした🎍