getとset
October 8, 2008 1:54 PM1
getとsetを使う理由がいまいちよく分かってなかったのでメモ。
参考ページ:akihiro kamijo: get と set
上のブログでは使う理由をこう書いてあります。
get と set は特別な関数を定義するために予約されている名前です。オブジェクトのカプセル化のため属性に直接アクセスする代わりに関数を定義したい、という人のための機能です。 他の言語では getXXX() とか setXXX() とかいう関数を定義したりすると思いますが、ActionScript では少し流儀が異なります。
OOPでは作法として、ほかのクラスのプロパティの値を直接書き換えたり、読み出してはならないそうです。
プロパティの値を設定したり、返したりする専用のメソッドをgetとsetを定義し、それにアクセスするようにしておくのが正しいようです。
つまり、クラスプロパティはすべてprivateにしておいて、ほかのクラスからアクセスしたい場合はpublicにするのではなく、別途getとsetメソッドを設定しなさい、ということでしょうか??
詳しい方いらっしゃればアドバイスいただきたく・・・。
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
var getset:GetSet = new GetSet();
getset.publicProp = "Hello World";
trace(getset.publicProp);
}
}
}
package
{
public class GetSet
{
private var privateProp:String;
public function GetSet()
{
}
public function get publicProp():String
{
return privateProp;
}
public function set publicProp(str:String):void
{
privateProp = str;
}
}
}
追伸:
FlashDevelopでクラスプロパティのところでCtrl+Shift+1を押すと自動的にgetとsetメソッドが!!
衝撃!!便利すぎ!!
ちょっとこんなん書くのめんどくせえなあとか思ってたんですが、FlashDevelopを使えば一発なのでそんなに面倒じゃない。
今後別のクラスからプロパティを参照したい場合はちゃんとgetとsetを使うようにしたいと思います。
FlashDevelop参照サイト:FlashDevelopのコード補完機能|_level0.KAYAC
masaya
いつも参考にさせていただいております。
大変遅レスで、きっとすでに解決されいるでしょうが...
get と set (getter, setter なんて呼んでますが)は、そのクラスを利用する際、取得してもかまわない、変更されてもかまわないプロパティにだけ用意してあげると解釈してます。
クラス内だけで利用したいなら、get も set も用意しない。
値の取得だけ許可するなら get だけ用意する。
値の取得や変更を許可するなら set を用意する。
といった感じでしょうか。
FlashDevelop のショートカットに感動しました。こりゃあ便利だ。
April 17, 2009 12:03 PM