この記事のURL

http://www.dango-itimi.com/blog/archives/2008/000959.html


FLASH info tips FDT 3.0 Enterprise beta版で Refactor Moveコマンドがサポート

最近情報収集にうとくなっており見逃していました。
FlexBuilder なり FDT なり、早く Refactor Move コマンドがサポートされるようにならないかなあ、と鼻をほじほじしながら待ち望んでいたところ、FDT 3.0 Enterprise beta版 で Move コマンドがサポートされたとのこと。

http://fdt.powerflasher.com/blog/?p=40

早速利用してみましたが、oh ブラボー!としかいいようがありません。プログラミング中に、クラス名、メソッド名、変数名はおろか パッケージ名やパッケージ構造もモリモリ変更したくなる方にはうってつけのツールとなりました。

追記)ベータ版のせいなのか、パッケージ名付でクラスを newを行っている箇所に対しては Moveが実行されない等、まだ動作は完全ではない模様。

---

以下、Action Script での Refactor Rename コマンド実行における注意事項。
配列演算子による変数へのアクセスの記述は注意が必要となります。

以下のような 配列アクセス演算子を用いた Test というクラスがあったとします。スクリプトはAS2で記述しています。

class Test{

	private var num :Number;
	private var num1:Number = 10;
	private var num2:Number = 20;

	public function Test(n:Number){

		num = this["num" + n];
		trace(num);
		trace(num1);
		trace(num2);
	}
}

Refactor の Rename コマンドを用い、num1 を aaa1 という変数名に変更した場合、以下のようになります。

class Test{

	private var num :Number;
	private var aaa1:Number = 10;
	private var num2:Number = 20;

	public function Test(n:Number){

		num = this["num" + n];
		trace(num);
		trace(aaa1);
		trace(num2);
	}
}

Test コンストラクタの引数 n に 1 の値が渡された場合、変数 num1 は存在しないため、変数 num には undefined が代入されてしまいます。

Refactor の Rename コマンドを用いることを考えるのであれば、Test クラスは以下のように記述すべきとなります。

Refactor Rename コマンド実行前

class Test{

	private var num :Number;
	private var num1:Number = 10;
	private var num2:Number = 20;

	public function Test(n:Number){

		num = (n == 1) ? num1 : num2; 
		trace(num);
		trace(num1);
		trace(num2);
	}
}

Refactor Rename コマンド実行( num1 → aaa1 へ Rename)

class Test{

	private var num :Number;
	private var aaa1:Number = 10;
	private var num2:Number = 20;

	public function Test(n:Number){

		num = (n == 1) ? aaa1 : num2; 
		trace(num);
		trace(aaa1);
		trace(num2);
	}
}

private な変数やメソッドでは、上記のような問題に対する被害はあまり大きはないかもしれません。しかし、public な変数やメソッドに配列演算子を用いてアクセスする箇所が存在する場合、Rename コマンド実行により、複数クラスに影響が出てしまい 調査が困難となってしまう可能性があります。

[ FLASH ] [ info ] [ tips ] 投稿者 siratama : 2008年03月13日 21:42

トラックバック

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

コメント

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




[EDIT]