この記事のURL

http://www.dango-itimi.com/blog/archives/2005/000704.html


FLASH tips FlashLite ネストを少なくする対処

FlashLite1.0~1.1はFlash4ベースのためfunctionがありません。function代わりにcall関数を用いて特定処理を呼び出しに行きます。
フレームに直接記述されるスクリプトは勿論functionではないので、処理途中の特定条件の時 returnを用いて処理を終了する、といった事を行うことができません。その為、自然とif文のネストが深くなり とても見難いスクリプトになってきてしまうことがあります。

例えば、次のような多数functionを呼び出した関数があるとします。

function test(){

	//func1の処理結果が偽ならば処理終了
	if( func1() == false ){ return; }

	//func2の処理結果が偽ならば処理終了
	if( func2() == false ){ return; }

	//func3の処理結果が偽ならば処理終了
	if( func3() == false ){ return; }

	//全て条件を満たすため 以降処理を実行
	~
}


Flash4で上記スクリプトを記述する場合、プログラマとして失格の烙印を押されそうなif文のネストラッシュになってしまいます。

//func1を呼び出し 結果を変数reVar1に戻り値として設定
call( "func1" );

//reVar1が真なら実行
if( reVar1 == 1 ){ 

	//func2を呼び出し 結果を変数reVar2に戻り値として設定
	call( "func2" );

	//reVar2が真なら実行
	if( reVar2 == 1 ){

		//func3を呼び出し 結果を変数reVar3に戻り値として設定
		call( "func3" );

		//reVar3が真なら実行
		if( reVar3 == 1 ){

			//以降処理を実行
			~
		}
	}
}


ここでピカンと閃いた苦肉の策、「while緊急脱出」を用いると以下のように記述することができます。

while(true){

	//func1を呼び出し 結果を変数reVar1に戻り値として設定
	call( "func1" );

	//reVar1が偽ならループ脱出
	if( reVar1 == 0 ){ break; }

	//func2を呼び出し 結果を変数reVar2に戻り値として設定
	call( "func2" );

	//reVar2が偽ならループ脱出
	if( reVar2 == 0 ){ break; }

	//func3を呼び出し 結果を変数reVar3に戻り値として設定
	call( "func3" );

	//reVar3が偽ならループ脱出
	if( reVar3 == 0 ){ break; }

	//以降処理を実行
	~

	//終了後ループ脱出
	break;
}


whileブロックを擬似的にfunctionブロックとして用い、breakをreturnの代わりに用いてしまうことにより、ネストが深くなることを避けています。(こんな書き方してしまっていいのでしょうか。)

[ FLASH ] [ tips ] 投稿者 siratama : 2005年04月22日 18:41

トラックバック

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

コメント

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




[EDIT]