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の代わりに用いてしまうことにより、ネストが深くなることを避けています。(こんな書き方してしまっていいのでしょうか。)


