この記事のURL

http://www.dango-itimi.com/blog/archives/2006/000853.html


FLASH TOOL tips mtasc1.12ではクラス内のローカルメソッドからprivateプロパティにアクセス可能に

mtasc

最新バージョンのmtasc1.12内にあるCHANGES.txtによると、

allowed access to private variables inside local defined functions

と1.12の変更点について記されています。これは個人的にかなりうれしい変更点です。
これは何かといいますと、例えば次のような処理を行うクラスがあるとします。

class Test{

	public var data:Number = 1;

	public function Test( root:MovieClip ){

		var scope:Test = this;
		root.onEnterFrame = function(){ trace( scope.data ); };
	}
}

ここで変数dataが、Testクラス内でしか用いられず、他のクラスからは参照されない場合、修飾子はpublicではなくprivateにすべきです。しかし今までのmtascでは、この変数dataの修飾子をprivateにすると、文法が間違っているというエラーメッセージが表示されswfをコンパイルすることができませんでした。( 変数rootはMovieClipクラスでTestクラスとは違うため、MovieClipクラスのメソッドからTestクラスへのprivateなフィールドにはアクセスできません、という解釈だったのではないかと思われます。 )

なので今まで私は dataの修飾子をprivateにする場合、

var scope:Test = this;

という記述を

var scope = this;

という型宣言をはずした表記にし、コンパイル時のエラーチェックを回避する手段を用いていました。しかしこれですと scopeの型が指定されていないため、コンパイル時 変数のタイプミスのチェックなどは行ってくれず、バグが眠ってしまう可能性がありました。

class Test{

	private var data:Number = 1;

	public function Test( root:MovieClip ){

		var scope = this;
		//dataをdetaとタイポ。コンパイラーはエラーに気付かず。
		root.onEnterFrame = function(){ trace( scope.deta ); };
	}
}

この問題のみが一点ものすごくネックに感じていたのですが、mtasc1.12からはより堅固で安全なコーディングが可能になりそうです。コーディングスタイルもようやく定まりそうです。

[ FLASH ] [ TOOL ] [ tips ] 投稿者 siratama : 2006年02月03日 21:07

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/813

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]