初心者のためのFlash ActionScript講座
Flash ActionScript Helper
Home Menu

最終更新日: 2003年3月24日

for文

for 文の書式

for文(for ステートメント)は、指定した条件が当てはまる間、処理ブロック内のステートメントを繰り返し実行します。while 文や do while 文と異なるのは、カウンタを利用し、カウンタの値を条件として、繰り返し処理を行う点です。そのためのカウンタを利用する仕組みが用意されています。
カウンタはわかりますね? よくホームページに見られる訪問者数をカウントアップする仕組みのことです。for 文のカウンタはもう少し柔軟性があります。

for 文の書式は以下のとおりです。

for文の書式  
●記述例

//1から20までを加算します。
for ( i=1 ; i<=20; ++i) {
    total += i ;
    trace("i:" + i + ",total:" + total);
}

少しむずかしい書式ですね。
' for ' の後にカッコ()でくくった初期化式、条件式、次処理式の3つの式、その後ろに中カッコ{}でくくった処理ブロックを記述します。式と式の間には、ステートメント区切りのセミコロン( ; )を置きます。

初期化式カウンタ変数の初期化を行う代入式です。カウントを開始するはじめの数値を代入します。初期化式は、for 文を実行する最初に一度だけ実行されます。
通常、カウンタ変数には、記述例のようにアルファベットの i が用いられますが、これはプログラムの世界の慣習です。i 以外の変数名を使用してもかまいません。
記述例は1から20までを加算するスクリプトなので、カウンタ変数の初期値として1が代入されています。

次の条件式は、評価結果がブール( true か false )となる論理式です。通常はカウンタの値を評価する等価、比較演算子を用いた式となります。評価結果が ture の間だけ処理ブロックが実行され、false になると、for 文を抜けます。
記述例ではカウンタ変数が20以下の間、繰り返し処理を行うために、i <= 20 ; の条件式が記述されています。

3つめの次処理式は、増減式といった方が分かりやすいかもしれません。ブロックを一度実行するたびに、カウンタの値を増減するための式です。加算式や減算式のほか、乗算、除算、関数などの式も記述可能です。
記述例では、インクリメント演算子を使用してカウンタを1ずつ加算しています。

for 文の全体のフローを見てみましょう(下左図)。
はじめに、初期化式でカウンタ変数の初期値が設定されます。次に初期値をもとに条件式が評価されます。true なら処理ブロックを実行、false なら for 文を抜けます。処理ブロックを実行した場合は、次処理式でカウンタ変数の増減を行い、条件式に戻ります。条件式の評価結果が true の間、この処理が繰り返されます。
記述例では(下右図)、カウンタ変数に初期値 ' 1 ' を代入。条件式( i <= 20 ; //20以下)の評価結果は true で、処理ブロック内を実行(変数 total に i を加算)。次処理式で i をインクリメント(1を加算。2になります)し、条件式に戻ります。 i が21になるまで繰り返し処理が行われます(21でfor 文を抜けます)。

上の記述例のスクリプトを新規ムービーのフレームアクションにコピー&ペーストして実行してみましょう。繰り返し処理中のカウンタ、total変数の値の変化が確認できます。

for文フローチャート



さまざまな記述例

前述のとおり、for 文のカウンタは柔軟性を持っています。上の例のインクリメント(1つ加算)の他、デクリメント(1つ減算)や乗除算、関数などを使用した次処理式も記述可能です。
例を提示しますので、ムービーで実行して確認してください。

 
●デクリメントの例

//1から20の総和を求めます。
//ただし、20からカウントダウンして加算します。
for ( i=20 ; i>=1 ; --i) {
    total += i ;
    trace("i:" + i + ",total:" + total);
}
カウンタは20からはじめ、デクリメント(1つ減算)しています。
条件式は1以上(i >= 1 ;)になります。
 
●乗算の例

for ( i=1 ; i<=100 ; i*=2) {
    total += i ;
    trace("i:" + i + ",total:" + total);
}
次処理式に乗算を利用した例です。

なお、複数のカウンタを使用することもできます。その際は、初期化式、次処理式に複数の式を記述します。複数の式を記述する場合は、式と式の間をカンマ( , )で区切ります。

 
●複数のカウンタを使用した例

for ( i=0,j=100 ; i<=100 ; ++i,++j) {
    total += i + j;
    trace("i:" + i + ",j:" + j +",total:" + total);
}
i と j の2つのカウンタを使用しています。初期化式と次処理式は2つですが、条件式はひとつだけです。



実際の使用例

for 文は、文字列や配列、擬似配列を利用したムービークリップやオブジェクトの処理などで多用されます。これらについては中級編で解説しますが、ここでひとつだけサンプルを見てみましょう。ムービークリップの例です。
下のムービーは、各フレーム番号を表示する5フレーム構成のムービークリップ mc0〜mc8、およびふたつのボタンを _root に配置しています。ボタンアクションに記述されたスクリプトは右下のとおりです。for 文を使用してすべてのムービークリップのフレーム移動を行っています。配列アクセスを使用していますので、スクリプトが理解できないかもしれませんが、いまはそれでかまいません。配列アクセスについては中級編で解説します。
ボタンをクリックして動作を確認してください。
このように、ムービークリップやオブジェクトのインスタンス名を、共通のベース名(例では「mc」)プラス 0 からはじまる連番で付けておくと、for 文による処理が簡単にできるようになります。

 
●[ 5 ] ボタンのボタンアクション
on (release) {
    for (i = 0; i <=8; ++i){ 
    this["mc" + i].gotoAndStop(5);
    }
}

●[ 1 ] ボタンのボタンアクション
on (release) {
    for (i = 0; i <=8; ++i){ 
        this["mc" + i].gotoAndStop(1);
    }
}
サンプルムービー
 

ソースファイル:formc1.zip(5.05 KB)


・関連項目

論理式
式、ステートメント、ブロック
フロー制御

(C)2000-2004 Ginga Baba. All rights reserved. お問い合わせ先:ginga@nifty.com
ページTOPへ
Home Menu