Clojure = ( + Lisp JVM )
「7つの言語 7つの世界」の6つ目の言語、 Clojure にチャレンジ。
Java 版の Lisp 言語です。
すべてはシーケンス ( list ) です。
以上。
Lisp 言語は、広く受け入れられた言語ではないが、いろいろなプログラミングパラダイムを知るための必修科目の一つ。他のプログラミング言語では、わからない世界がそこにある。
私自身は、大昔に、Lisp でアプリケーションを書いていたことがあるので、Clojure はなつかしかったし、また、Lisp 系言語が、ここまで発展しているのに、正直びっくりした。
Lisp 系言語の経験がない技術者には、いちど、 Lisp 系の世界を、Clojure で経験して、ぜひ、この独特のパラダイムを知ってほしいと思う。
実務で使うことはないかもしれないけど、見方や発想が広がり、設計能力のアップに、絶対、役に立つと思うんだけどなあ。
Clojure は、 Java の資産が全部使えちゃうし、並行処理も、非常に面白い( Lisp 系らしい ) 取組をしている。ただ、これは、 Lisp 系言語の中での比較には意味があるけど、別のパラダイムの言語との比較では、やはり、「シーケンス」の感じをぜひ体験しておきたいところ。
万物はリスト ( シーケンス )である
文字列、リスト、マップ、ファイルシステム、並列処理、....
全部、「シーケンス」モデルで同じに扱う。
文字列は、String, コレクションフレームワークに、 配列に、 Arrays クラスと、ごった煮の Java 世界ではなく、「万物はシーケンスである」という Clojure の世界観は、ぜひいちどご賞味ください。
万物は、 first と rest である
これは、上記の「万物はシーケンスである」の別の言い方。
リストは、たくさんの要素の集合ではなく、「最初の要素」+「残りの要素」の2つ組み合わせという発想。
もちろん「残りの要素」が、またシーケンスつまり「最初」と「残り」という入れ子の構造になっている。
この感覚が、Clojure (というか、Lisp 系全般)の、もっとも「らしい」ところ。
関数(命令)もデータである
別の言い方をすると、Clojure の世界は「データだけ」です。
データのシーケンスを作って、実行する。これの繰り返し。
Lisp 系のわかりにくさ(なじみにくさ)の理由のひとつの独特(?)の「記法」
( * 2 3 )
が、他の多くの言語では、 ( 2 * 3 ) になる。
この違いを会得できれば、Clojure の世界が、ちゃんと理解できたことになる。
なぜ、こういう記法をしているかが、
Clojrueの
- 万物はシーケンスである
- 万物は first と rest である(その入子である)
- 万物は データの並びである(プログラムもデータの並びである)
の世界観を会得するということ。
この世界を一度体験すると、データの塊やプログラムコードの塊の扱い方のセンスが変わること請け合いです。
ぜひ、一度、Clojure お試しあれ。