- 2009-04-13 (月)
- 技術
プロパティ(属性)を持つクラスを使う場面は開発を行って行くと多々ありますが、各言語によって書き方はまちまちです。
とは言っても目指すところは同じだと思いますので、以下に何個か載せてみました。
JavaScriptのSetter・Getter
IE6、7で実装されていないため、今まで開発では全く使ったことがないですが、使い始めると便利そうですね。
現時点では以下の2パターンでgettter、setterを定義できる。
・Firefox独自実装、その後Safari・Operaも実装
- __defineSetter__
- __defineGetter__
・ECMAScript3.1実装
- get getter()
- set setter(value)
以下のコードはFirefox、Safari、Operaで動作確認済。
またIE8に実装されたObject.definePropertyメソッドというのがあるみたいなんですが、手元にIE8がないため確認できてないです。
詳細は以下に記述されてます。
IE8 の DOM のプロトタイプと Getter/Setter API はどうなるか - IT戦記
次の JavaScript の仕様はこうなる! ECMAScript 3.0 から 3.1 への変更点まとめ - IT戦記
ActionScript3のSetter・Getter
なんとなくこっちのほうが使う機会が多そう。
詳しい内容は以下からどうぞ。
【AS3入門】getterとsetter - 独学ActionScript
PerlのSetter・Getter
Perlでアクセサメソッドを作ろうとするとちょっぴりコード量が膨らみます。
ようは引数があればSetterと見なし、引数がなければGetterと見なすという感じです。
これをもっと簡略化してくれるCPANモジュールのMooseが気になるところです。
RubyのSetter・Getter
Rubyではそもそもオブジェクトの外部からインスタンス変数を直接参照することができないので、アクセサメソッドが必須になってきます。
以下の例は自分でアクセサを作った場合
でもこれを属性分作るのは面倒なので、以下のように簡単にアクセサメソッドを作ることができます。
ここらへんがRubyっぽいですね。
JavaのSetter・Getter
Javaのアクセサはみなさんご存知ごくごく一般的な感じ。
まぁこれでもEclipseの自動生成を使えば、Getter・Setterは自動で作ってくれるので便利と言えば便利なんですけどね。
まとめ
JavaScriptはやっぱり今の時点でもクロスブラウザの問題が出てきてて、実際に使われるのかどうかそのあたりが難しいところですが、
でもこうして見てみると昔のJavaScriptでは考えられないほど使いやすくなっているような気がします。
Rubyのように1行書けばよいのもあれば、setNameのように自前でメソッドを作らないといけないJavaなんかもあったり言語間ではバラバラなのはしょうがないですね。
いろんな言語を跨ぐと、この言語はどうだったっけかな?みたいに迷ってしまいそうですw
どうしてアクセサメソッドなんて面倒なものを使わないといけないのかは以下のリンクを参考にしてください。
オブジェクト指向プログラムでgetter/setterメソッドを使わなければならない10の理由
- Newer: ActionScriptで3D空間 - Papervision3Dをためしてみた
- Older: よく使うTextMateショートカット
Comments:0
Trackback:0
- TrackBack URL for this entry
- http://hisasann.com/cgi-bin/mt/mt-tb.cgi/1180
- Listed below are links to weblogs that reference
- いろんな言語のSetter・Getterを比較してみた from HouseTect, JavaScript Blog


