ループ
ループステートメントを使用すると、一連の値または変数を使用して特定のコードブロックを繰り返し実行できます。 コードブロックは常に中括弧({})で囲むことをお勧めします。コードブロックに含まれるステートメントが 1 つのみ場合は中括弧を省略できますが、条件の場合と同じ理由から省略することはお勧めしません。後で追加したステートメントがコードブロックから誤って除外される可能性が高くなるからです。コードブロックに含めるステートメントを後で追加するときに、必要な中括弧の追加を忘れた場合、そのステートメントはループの一部としては実行されません。
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]);
}
// output:
// x: 20
// y: 30
配列のエレメントの繰り返し処理を実行することもできます。
var myArray:Array = ["one", "two", "three"];
for (var i:String in myArray)
{
trace(myArray[i]);
}
// output:
// one
// two
// three
オブジェクトが sealed クラス(ビルトインクラスおよびユーザー定義クラスを含む)のインスタンスである場合、そのプロパティに対して繰り返し処理を実行することはできません。繰り返し処理を実行できるのは、ダイナミッククラスのプロパティのみに対してです。ダイナミッククラスのインスタンスの場合であっても、繰り返し処理を実行できるのは、動的に追加されるプロパティのみに対してです。
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);
}
// output:
// 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);
}
/* output
Jane
Susan
John
*/
以下の例が示すように、配列のエレメントの繰り返し処理を実行することもできます。
var myArray:Array = ["one", "two", "three"];
for each (var item in myArray)
{
trace(item);
}
// output:
// 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);
// output: 5