ループ

ループステートメントを使用すると、一連の値または変数を使用して特定のコードブロックを繰り返し実行できます。コードブロックは常に中括弧 ({}) で囲むことをお勧めします。コードブロックに含まれるステートメントが 1 つのみ場合は中括弧を省略できますが、条件の場合と同じ理由から省略することはお勧めしません。後で追加したステートメントがコードブロックから誤って除外される可能性が高くなるからです。コードブロックに含めるステートメントを後で追加するときに、必要な中括弧の追加を忘れた場合、そのステートメントはループの一部としては実行されません。

サブトピック

for
for..in
for each..in
while
do..while

for

for ループを使用して、特定の値範囲で変数を繰り返し処理することができます。for ステートメントには、3 つの式を指定する必要があります。3 つの式とは、初期値に設定する変数、ループがいつ終了するかを指定する条件ステートメント、および各ループで変数の値を変更する式です。たとえば、次のコードは 5 回ループします。変数 i の値は 0 で始まり、4 で終了し、出力は数値 0 ~ 4 の数値を取り、それぞれが独自の行に出力されます。

var i:int;
for (i = 0; i < 5; i++)
{
    trace(i);
}

for..in

for..in ループは、オブジェクトのプロパティまたは配列のエレメントの繰り返し処理を行います。たとえば、for..in ループを使用して、汎用オブジェクトのプロパティを繰り返し処理することができます (オブジェクトプロパティは特定の順番で保持されないので、プロパティは一見ランダムな順番のように表示されます)。

var myObj:Object = {x:20, y:30};
for (var i:String in myObj)
{
    trace(i + ": " + myObj[i]);
}
// 出力 : 
// x: 20
// y: 30

配列のエレメントの繰り返し処理を実行することもできます。

var myArray:Array = ["one", "two", "three"];
for (var i:String in myArray)
{
    trace(myArray[i]);
}
// 出力 : 
// one
// two
// three

クラスがダイナミッククラスでない限り、オブジェクトがユーザー定義クラスのインスタンスである場合、そのプロパティの繰り返し処理を実行することはできません。ダイナミッククラスのインスタンスの場合であっても、動的に追加されるプロパティによってしか繰り返し処理を実行できません。

for each..in

for each..in ループは、XML または XMLList オブジェクトでタグ付けできるコレクションのアイテム、オブジェクトプロパティで保持される値、または配列のエレメントを繰り返し処理します。たとえば、次のコードの抜粋に示すように、for each..in ループを使用して汎用オブジェクトを繰り返し処理できますが、for..in ループとは異なり、for each..in ループのイテレータ変数にはプロパティの名前の代わりにプロパティによって保持される値が含まれます。

var myObj:Object = {x:20, y:30};
for each (var num in myObj)
{
    trace(num);
}
// 出力 : 
// 20
// 30

次の例に示すように、XML または XMLList オブジェクトの繰り返し処理を実行することができます。

var myXML:XML = <users>
                   <fname>Jane</fname>
                   <fname>Susan</fname>
                   <fname>John</fname>
                </users>;

for each (var item in myXML.fname)
{
    trace(item);
}
/* 出力
Jane
Susan
John
*/

以下の例が示すように、配列のエレメントの繰り返し処理を実行することもできます。

var myArray:Array = ["one", "two", "three"];
for each (var item in myArray)
{
    trace(item);
}
// 出力 : 
// one
// two
// three

オブジェクトが sealed クラスのインスタンスである場合、そのプロパティの繰り返し処理を実行することはできません。ダイナミッククラスのインスタンスの場合であっても、クラス定義の一部として定義されるプロパティである固定プロパティの繰り返し処理を実行することはできません。

while

while ループは、条件が true である限り繰り返される if ステートメントに似ています。たとえば、次のコードは for ループの例と同じ出力を生成します。

var i:int = 0;
while (i < 5)
{
    trace(i);
    i++;
}

for ループの代わりに while ループを使用することの 1 つの短所は、while ループを使用する方が無限ループが記述されやすいことです。カウンタ変数をインクリメントする式を省略した場合、for ループのサンプルコードはコンパイルされませんが、while ループのサンプルコードはコンパイルされます。i をインクリメントする式がないと、ループは無限ループになります。

do..while

do..while ループは、コードブロックが実行された後に条件がチェックされるので、少なくとも 1 回はコードブロックが実行される while ループです。次のコードは、条件を満たさない場合でも出力を生成する do..while ループの簡単な例を示します。

var i:int = 5;
do
{
    trace(i);
    i++;
} while (i < 5);
// 出力 : 5

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000052.html