ふと思い立ってClojureの勉強を始めることにしました。

最近は並行プログラミングの必要性から、関数型言語の人気が以前にもまして高まってきているという話はいろいろなところで耳にするようになったのですが、普段はJavaしか書かない私のような普通の業務プログラマーにとっては、正直なところHaskellScalaといった言語はなかなかに敷居が高いところがあると思います。これらは型安全性を重視している静的な型付けの言語であり、プログラムを正しく実行するには型推論などの仕組みを理解する必要があります。また、純粋な関数型としての特性を理解するにはモナドなる難解な概念を理解しないといけないようですし、特に、Scalaの場合はオブジェクト指向言語の要素がミックスされているため、クラス、トレイト、抽象型などの概念や、関数型と命令型の正しい使い分けなどを理解しなくてはなりません。*1とにかく、これらの言語では関数型を学ぶ以前にいろいろ新しく学ぶことがたくさんあるため、自力で最初に学ぶ関数型言語としてはなかなか難しいところがあるように思います。実際、フレームワーク、ツール、ドメインの業務知識などいろいろなことを勉強しないといけない業務プログラマーの立場としては、プログラミング言語の勉強だけに長い時間を割くということが難しいという実情もあります。
そんな中で、

のようなことを何となく考えていたのですが、残念ながらGroovyだとどうしても関数型のメリットをはっきりと活かすようなプログラミングが難しいのも確かです。何か関数型の考え方を勉強するのによい言語はないかなと考えていた折、ちょうどよいタイミングでスターフレンドのid:fumokmmさんの
というつぶやきが目にとまりました。GroovyだけでなくClojureまで知っているとはすごいなと思ったのですが、ご謙遜かもしれませんが、
というお言葉を信じて、私も翻訳協力者に混ぜていただく運びとなりました。その翻訳サイトは以下にあります。
Clojure Japanese Documentation
ドキュメントを翻訳しながら新しい言語も学ぶというのは、最終的な成果物もみんなの役に立って、自分の勉強にもなるのでなかなかに良いアイデアですね。ただ、さすがにまったく基礎知識なしで翻訳を進めるのは無謀なところがあるので、本日書店で早速以下を購入して勉強することにしました。*2
プログラミングClojure

プログラミングClojure

ちょっとかじったところでは、

  • 文法はほとんどLispLispの方言と言える)
  • クラスなどは定義できないから関数型のパラダイムに集中できる
  • Javaのメソッドを簡単に呼び出せる(静的な型も使えるということ?)
  • 純粋関数型以外に状態共有のメカニズムがある

といったところが特徴のようです。実際、hello worldは以下のように書けます。

(println "Hello World") ; Hello Worldと表示される。結果はnil。

クラスやメソッドの定義といったものを考える必要がなく、単純な関数の評価なのでわかりやすいですね。一方で、Javaのメソッド呼び出しは、以下のように書けます。

(println (.toUpperCase "Hello World")) ; HELLO WORLDと表示される。結果はnil。

括弧の先頭で与えるシンボルが関数名だと関数呼び出しとなるのですが、この関数名がピリオドで始まっていると次の要素に対するメソッド呼び出しとなるようです。Javaの呼び出しなどで関数型としての厳密性はなくなっているのですが、既存のJavaのライブラリーと相互運用できるというところは実用面では非常にメリットが大きいと思います。Lispの独特の構文に慣れる必要はありますが、直感的にはなんとくなく私が求めていた言語に出会えた気がします。ちなみに、日本ではまだまだ知名度が低いようですが、既に洋書は多数出版されているみたいですし、あのDDDのEvans氏もお好きとのこと。これからあせらず、じっくり勉強していこうかと思います。なお、以上に紹介したClojureの本はJava EE勉強会で読書会が行われているみたいですので、東京近郊の方は参加してみてはいかがでしょうか。
FrontPage - Java EE勉強会
あと、以下も読書記録として非常に参考になると思います。
http://d.hatena.ne.jp/sy-2010/20110330/1301492628

*1:Scalaは名前のとおりスケーラブルな言語であり、入門レベルではとっつきやすいプログラムを書けるのですが、言語を究めてきちんと使いこなそうと思えば多くの概念を学ぶ必要があるようです。

*2:プログラマーの定年を過ぎてまったく新しい言語を学ぶというのは何とも無謀な試みのようなのですが、気持ちだけは若いつもりです。