第6回Rails勉強会
今回も日曜日に行ってきました。
いつのまにやらもう火曜日、議事録は完全に出遅れてしまいましたが、今回も楽しかったです。そして翌日は軽く二日酔いでした。反省。
前半セッション:SeasarでRails
Seasarの各種プロダクトを使ってJavaでRailsを作れないか、という話。もちろんJavaとRubyでは言語の特徴も違えば適している用途も違いますが、そのへんはおいといて。良くいえば思考実験、悪くいえばネタセッションだったりしました。
オーナーのyuguiさんはじめ、参加者の多くが議事録なんかを丁寧に書くタイプの人だったので、私は早々に議事録係を辞退。気楽に参加してきました。
いろんなテーマで話したんですが、自分のなかでJavaとRubyの違いを実感したのは『JavaでActiveRecordのような宣言的な書き方はできないか』というトピックでした。後半セッションのvalidates_*みたいな感じですね。で、Javaではこういう記法は難しく、アノテーションなどで実現するのが自然なんじゃないか、という話で落ち着きました。
というのも、あの手の宣言的な記法は、ActiveRecord::Baseのクラスメソッドであり、()が不要なRubyのシンタックスもあってあのように書くことができます。
RubyのクラスはClassクラスのインスタンスを定数に代入したものであり、つまりクラスもClassインスタンスであるため、クラスメソッドはそのClassインスタンスの状態を変える(インスタンス変数を操作する)ことが容易です。
対してJavaのクラスメソッド(staticメソッド)は単に名前空間の区別*1にのみ使い、クラスの状態を変えたり足したりする用途には使わないほうがよいような気がします。やはり実行時にクラスに機能を追加/変更したりするのはJava的ではないということでしょうかね。
Validationについて
これは自分がセッションオーナーに。
参加してくださった方々が、既に詳細な議事録を作ってくださってます。
あとはValidationsの実装をお伝えする際に出したサンプルです。下記の拙エントリをご覧くださいませ。