ブログはじめました。
ちょぼくさいSI会社のベトナムにある子会社で小振りの人生を生きている、プログラマーの尾島(おじま)と申します。いまさらなのですけれど、ブログはじめました。
といっても、所詮はプログラマー。人間相手の商売ができないからコンピューター相手の商売をしているわけで、だから、ブログに書くのは、普通の人は完全置いてけぼりの、コンピューターの話ばかりになると思います。人間が偏っていて、本当にすみません。
というわけで、早速コンピューターの話、私の中で最近流行している、Lisp方言の一つであるClojureの話をさせてください。
というのも、先日、日本の友人に「くろーじゃーは良いと思うのだが、なぜか流行らない」という話をしたところ、「認識が間違えている。くろーじゃーは流行っている」と反論され、よくよく話を聞いてみたら、相手は言語機能の一つであるClosureの話をしていたということがあったんです。
Clojureの現在の状況は、Javaのバージョン1.0αの頃、Javaの話をすると「もかじゃば?」と聞き返された頃と同じレベルなのだと思います。超マイナー。Clojureをやるということには、テクニックを語り合う相手を探すのに苦労しちゃう、特殊な性癖を持った人たちと同じ苦労があるわけですよ。
で、ここに何か書いたら何かが変わるわけではないとは思うのですけれど、でも、まぁ、変わらないという確証もないわけで、だから、Clojureについて、少し書いてみます。
私は無学なもんで、Common LispもSchemeも、とにかくLispと関係するものは使ったことがありませんでした。にもかかわらず、そんな私がLispの方言であるClojureを勉強しようと考えたのは、勢いで買った「7つの言語 7つの世界」の中に->と->>マクロについて書いてあって、->や->>を使うと左から右に流れるコードを書けると知ったから。
もう少し詳しく。たとえばRubyでメソッド・チェーンを使うと、左から右へと流れるコードを書くことができます。以下のような感じです。
(1..10).find_all(&:even?).reduce(:+) # 1〜10までの数値から、偶数を探して、足し合わせる。
左から順に読んで行けばよいので、実にわかりやすい! 私は人間が単純にできていますから、もー大喜びですよ。「これからはRubyだね」とベトナムで日本語で言い出して、ベトナム人は日本語が分かりませんから残念な人を見る目で優しくされたりする始末です。
でもね、メソッド・チェーンって万能じゃないんですよ……。たとえば、以下のような場合。
puts 1 + 2 # 1 + 2を出力する。
いやだ嫌だイヤだ! 何が嫌なのか簡単には分かってもらえないでしょうし、JavaとかC#を使っていた昔は右から左に読むのが当たり前だったはずなのですけれど、メソッド・チェーンの美しさを知ってしまったからにはもう我慢できません。上の例は簡単なので実はどーでもよいのですけれど、もっと複雑な場合には涙が出ちゃう。そう、貧乏な家に生まれた私は砂糖を入れた牛乳を凍らせたものをアイスと呼んで大喜びで食べていたのですけれど、ガリガリ君を知ってしまった今となっては、もう大喜びはできないのです。
というわけで、Clojureですよ。Clojureならば、以下のように書けます。
(-> (+ 1 2) println)
ほら、左から右に順に読めるようになった。Clojureって素晴らしいでしょ?