RubySapporoNight vol.8

アップルストア札幌でのイベントに参加してきました。スピーカーはRuby札幌のしまださんです。前半はRuby札幌の紹介と先日の札幌Ruby会議01の話、後半は「Fluent interface」いわゆる「流れるようなインターフェイス」に関する話でした。
「流れるようなインターフェイス」といえば、Java界隈でもS2JDBCが採用されたりしています。前の業務でも検索条件クラスを流れるようなインターフェイス風で実装したりしていました。これは、いわゆるオブジェクトへのメッセージング(メソッド呼び出し)を順次処理として記述していたようなコードよりも、ある程度のまとまりを連続的に1行で記述することで書き易い/読み易いコードになるよ、という話です。

例えば、S2JDBCのサンプルではこんな感じです。

List<Employee> results = jdbcManager.from(Employee.class)
                             .join("department")
                             .where("id in (? , ?)", 11, 22)
                             .orderBy("name")
                             .getResultList();

最初に書き易さですが、これは非常に楽で書き易いと実感できます。特にJavaはEcliseなどのIDEでの入力補完が非常に高性能な言語です。jdbcManagerと入力した後に.を入力すれば、候補としてfromが簡単に表示されます。したがって、あまりAPIに詳しくない場合でも感覚としてガンガンとコードを書いていくことが可能です。勿論、細かいところでAPIドキュメントを参照するべきですが、入力補完のサポートは大きなアドバンテージかと思います。

次に読み易さですが、自分にとっては読み易いか?と言われると読みにくい場合もあると思います。例えばSQLを知っている人にとって、S2JDBCのサンプルは容易に挙動が想像でき、これは読み易いに入ると思います。ですが、あまり馴染みのない構文で馴染みのない操作を「流れるように」書かれても読み易くはならないと感じます。また、JavaでのメリットとしてはSQLは実行してみなければエラーになるか解りませんが、S2JDBCのような流れるようなJavaインターフェイスの場合はほとんどの部分は静的なコンパイラチェックで防止できるのは大きな違いでしょう。


さて、Rubyの話ですが、自分には正直なところRubyって書き易いけど読みにくい言語という感覚です。すごく柔軟に簡潔にコードが書けるけど、慣れていない人には読むのがツライです。なるべく流れるようなインターフェイスを意識してライブラリなどを作ると読むのにも非常に気持ちいの良い言語になるのかな、と感じたわけです。
ただ、使う分には楽しいんですけど、流れるようなインターフェイスのライブラリを作るのは難しいんですよね。