feb19.jp

Nobuhiro Takahashi
Designer / Engineer

getter/setterの意味が分かった

getter/setterの意味が分かった

get/setとかgetter/setterとかいうあれの意味がようやくわかりました。publicなプロパティにアクセスするだけなのになぜそんな手間が?と思ってたのですが、プロパティに直でアクセスするのはよくないかららしい。あと他にもいろんな意味が。というわけでメモ。

プログラミングにおいて、クラスのプロパティにクラス外部から直接アクセスして直接値を書き換えるという行為は、基本的によくないらしい。そこで、メソッドを用意しておいて、setのメソッドでプロパティを変更、getのメソッドでそれを返すようにする。setとgetで指定したメソッドは()を付けない。つまり見た目的にはプロパティにアクセスしているようにみえるというわけ。

たとえばこんなクラスを用意してみる。

class UserName {
	private userName;
	function get user():String {
		return userName;
	}
	function set user(name:String):Void {
		userName = name;
	}
}

操作するプロパティはprivateにしておいて隠蔽しておく。ただしgetとsetで読み書きが出来るので間接的にアクセスする事が可能。Flashのコンポーネントとかはこういう構造で作られているので手軽に様々なプロパティにアクセスする事ができてシンプルなものにする事ができている、ということらしい。実際にアクセスするには以下のようにする。

obj.user = "feb19";	// setの方にアクセス
trace(obj.user);	// getの方にアクセス

ん、ていうかこれActionScript1.0でObject.addProperty()を使ってたけど要はそれと同じことじゃない?これで俄然いろんな便利クラスが作れそうだ。

Tweet Share Bookmark

Navigation

prev: Flash Videoをひたすら簡単に自作Flashに組み込むためのクラス
next: FlashCS3でビットマップやムービー、XMLを読み込む方法

Recently Entries