mtasc1.12ではクラス内のローカルメソッドからprivateプロパティにアクセス可能に
最新バージョンの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