2007/03/04

プロパティを巡る議論

Why Java Properties are BAD, ugly and uncomfortable
何故Javaのプロパティはだめで醜くて不自由なのか。
この人の主張は、
・"->"が醜い
・セッタメソッドでパラメータオーバーロードが使われたら、同じメソッド名にも関わらず一つはプロパティ用で一つは単独のメソッドになる。この状態も醜い。
・なのでプロパティサポートは良いことではないけど、getXXX、setXXXを自動で生成するだけならありかも。
ってなところ。

プロパティを巡る議論はいろいろあって、様々な人から提案が行われてる。もっとも代表的な議論はおそらくこれ。Property Support in Java, the Java Way™

コードはこんな感じ。

class Test{
public property String name;
public static void main(String[] args){
Test t = new Test();
t.setName("Joe");
System.out.println(t.getName());
t->name = "Joe";
System.out.println(t->name);
}
}

propertyを使って宣言すると、getXXX/setXXXが自動的にされること、及びpropertyに対して短縮構文でgetXXX/setXXXにアクセスできることが主要な特徴。ここから派生してもっと過激なこともたくさん書いてあるけれども、基本はそんな感じ。

で、これには様々な人から賛否両論があって、というか否定的な意見の方がよく目にするんだけど、批判は短縮構文"->"に集中してる。確かにこれは醜いと思う。
ただし、重要な意見として、プロパティはシンタックスシュガーではなく、コントラクトだというものがある。これは核心を突いていると思う。つまりは単に記述を楽にするものではなくて、プロパティであること自体が意味を持ち固有の機能を持つってこと。固有の機能として、JavaDocやリフレクション等に情報が反映されて、値の検証が行えたり、正しい値がどのようなものか明示できるようになることが挙げられている。

僕も"->"は醜いと感じるし、プロパティ自体好きではないんだけど、プロパティとしてデフォルト値や検証情報(0以上の数値とか2000年以降とか20文字以内とか)が記述できて、Hibernate等のO/Rマッピングは基本的にプロパティを対象とする、なんて使われ方であれば、利点の方が遙かに大きいので導入して欲しい。

0 件のコメント: