Macromedia Flash非公式テクニカルノート

1から連番の配列をつくる(ループ処理)

ID: FN0110001 Product: Flash

Platform: All
Version: 5.0

'for'あるいは'while'アクションは、終了条件を指定して、繰り返しループ処理を行います。これらのアクションを使って、1から指定された整数までの連続した数値の配列をつくってみましょう。

1. forを使ったスクリプト
'for'アクションでは、変数の初期化、ループ処理の終了条件、変数の更新という3つの式を指定します。'for'アクションを使って、1から指定した整数までの連続した値を配列に格納するサンプルスクリプトは、以下のとおりです。スクリプトは、'function'として定義しました。'for'や'function'などのアクション、スクリプトで使用されている演算子・メソッドについて、詳しくは「ActionScript辞書」をご参照ください。

//1から指定された連番の配列をつくる関数
//nLast: 配列の最後の値となる整数
function xGetSerialArray (nLast) {
   var lResult = new Array();   //結果を格納する配列を作成(ローカル変数)
   for (var i = 1; i<=nLast; i++) {   //ループ処理: 配列の最後の値まで順に数値を増加
     lResult.push(i);   //数値を配列に追加
   }
   return lResult;   //結果の配列を返す
}
//関数のテスト例
trace (xGetSerialArray(10));
//出力ウィンドウの結果
1,2,3,4,5,6,7,8,9,10

'for'アクションは、指定した変数の値を変化させて、条件を満たす間同じステートメントをループ処理します。この例では、1から指定した数値までの値を、配列に順次追加したうえで、その配列を返します。変数の多くは、ローカル変数として'var'宣言をしています('var'アクションについて、詳しくは「ActionScript辞書」をご参照ください)。

2. whileを使ったスクリプト
'for'アクションでは、評価する式の初期値と値の変更、およびループの終了条件を指定します。'while'では、後者の終了条件のみを指定します。初期値の設定や値の変更を、別途のステートメントで行えば、同じ処理ができます(関数のテスト例および出力ウィンドウの結果は省略します)。

function xGetSerialArray (nLast) {
   var lResult = new Array();
   var i = 1;   //変数の初期値設定
   while (i<=nLast) { //ループ処理: 変数値が配列の最後の値になるまで
     lResult.push(i);
     i++;   //変数値を増加
   }
   return lResult;
}

今回の例でいえば、変数の初期値および変数値の変更をループ処理の最初に設定する'for'アクションを使った方が、スクリプトとして見やすいといえます。

3. 返される値を調べる
Flash 5のメソッドは、その実行後に値を返すものが少なくありません。たとえば、'Array.push'メソッドも値を返します。返す値は、エレメントを追加した後の配列の長さです(「ActionScript辞書」参照)。

lArray = new Array();
trace (lArray.push(1));
//出力ウィンドウの結果
1

新規に作成した配列にエレメントをひとつ追加したので、'trace'アクションにより出力ウィンドウには1と表示されます。

返された値を評価することによって、2のスクリプトは劇的に短縮できます。

function xGetSerialArray (nLast) {
   var lResult = new Array();
   while (lResult.push(++i)<nLast) {
   }
   return lResult;
}

'while'アクションの{}が改行されているために2行にわたっていますが、これは1行に記述できます(「アクション」パネルで「ノーマルモード」にすると、2行になってしまいます)。すると、実質3行のステートメントで'function'が構成できたことになります。

2のサンプルと異なり、変数iの初期値を設定していません。そうすると、初期値は未定義('undefined')になります。けれど、'while'アクションの条件中でプリインクリメント('++')していることに、ご注目ください。インクリメントの対象となるのは、数値です。'undefined'は数値として扱われると、0と看做されます。その値をプリインクリメントするので、初期値に1を与えたのと同じ結果になります('++'演算子について、詳しくは「ActionScript辞書」をご参照ください)。

'while'アクションの条件では、配列lResultに変数値iを追加し、返された値を配列の最後の値となる整数nLastと比較しています。返される値は、整数を追加した後の配列の長さです。整数を1から追加していくと、最後の値となる整数を追加したときに、配列の長さはその整数の値を超えます。したがって、そこで'while'アクションが終了する訳です。

メソッドが返す値を調べることで、ActionScriptを簡潔に記述できる例です。

_____

作成者: 野中文雄
作成日: 2001年10月3日


© 2001 and beyond Fumio Nonaka All rights reserved.