Повтор



Инструкции цикла позволяют повторно выполнить определенный блок программного кода, используя несколько значений переменных. Корпорация Adobe рекомендует, чтобы блок кода всегда включался в кавычки ({}). Хотя можно пропустить скобки, если блок кода содержит всего одну инструкцию, на практике так делать не рекомендуется по той же причине, почему не рекомендуется и для условий: увеличивается вероятность непреднамеренного исключения инструкции из блока кода в случае их последующего добавления. Если впоследствии добавится инструкция, которую нужно включить в блок кода, но при этом будут забыты обязательные скобки, инструкция не будет выполняться как часть цикла.

for

Инструкция цикла for позволяет итеративно увеличивать переменную в определенном диапазоне значений. Необходимо передать в инструкцию for три выражения: переменную, установленную в качестве исходного значения; инструкцию условия, определяющую окончание цикла; а также выражение, которое изменяет значение переменной для каждого цикла. Например, в следующем программном коде цикл выполняется пять раз. Значение переменной 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

Чего нельзя делать, так это выполнять итерацию по свойствам объекта, если он является экземпляром определенного пользователем класса, если этот класс не является динамическим классом. Но даже с экземпляром динамического класса можно выполнять итерации только по свойствам, которые добавляются динамически.

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

Нельзя выполнять итерацию по свойствам объекта, если он является экземпляром запечатанного класса. Даже для экземпляров динамических классов нельзя выполнять итерации по каким-либо фиксированным свойствам, какими являются свойства, определенные как часть определения класса.

while

Цикл while работает аналогично инструкции if, выполняя повторения до тех пор, пока для условия выдается значение true. Например, в следующем программном коде получаются такие же результаты, что и в примере с циклом for.

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

Одним из недостатков использования цикла while вместо цикла for является то, что неопределенные циклы проще писать с помощью циклов while. Пример программного кода с циклом for не компилируется, если пропущено выражение, которое инкрементально увеличивает переменную обратного счетчика, но цикл while не компилируется, если пропущен этот шаг. Без выражения, инкрементально увеличивающего переменную i, цикл становится неопределенным циклом.

do..while

Цикл do..while является циклом while, в котором гарантируется, что блок кода будет выполнен хотя бы один раз, поскольку условие проверяется после выполнения блока программного кода. В следующем программном коде показан простой пример цикла do..while, создающего выходные данные даже в случае несоблюдения условия.

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