В операторах цикла производятся повторяющееся выполнение вложенных операторов. В языке Fore.NET доступны следующие виды циклов:
Оператор For выполняет вложенные операторы заданное число раз. Количество итераций определяется начальным и конечным значением переменной цикла, а также его шагом.
В каждом операторе For указывается идентификатор переменной, которая называется переменной цикла. Также указываются выражения, определяющие начальное и конечное значения переменной цикла, а также шаг его изменения. Если шаг изменения переменной цикла не указан, то он считается равным единице.
Внутри оператора For можно использовать оператор Break для выхода из цикла, а также оператор Continue для передачи управления в завершающую точку вложенных операторов цикла и выполнения следующей итерации работы цикла.
Sub TestFor();
Var
i, j: integer;
Rnd: Random = New Random();
Begin
For i := 0 To 100 Do
j := Rnd.Next(0, 100);
If j > 50 Then
Break;
End If;
End For;
End Sub;
При выполнении примера будет осуществлен выход из цикла, если было сгенерировано случайное целое число больше 50.
Оператор For Each производит перечисление элементов коллекции при этом выполняя блок вложенных операторов для каждого элемента коллекции.
В каждом операторе For Each указывается идентификатор переменной, которая называется переменной цикла. Во время выполнения оператора переменная цикла представляет элемент коллекции для которого в текущий момент производится итерация. Ошибка компиляции выдается в случае если вложенный оператор пытается изменить значение переменной цикла или передать её в качестве значения параметра по ссылке.
Выражение в операторе (его тип) должно представлять собою коллекцию и должно быть определено явное преобразование от типа элементов коллекции к типу переменной цикла.
Системный тип System.Array также является типом-коллекцией. Поскольку все массивы являются производными от данного типа, то в операторе For Each допускается использование любого выражения, являющегося массивом. Порядок обхода элементов массива определяется следующим образом. Если массив является одномерным, то его элементы обходятся в порядке увеличения индекса от наименьшего к наибольшему. Если массив является многомерным, то его элементы обходятся таким образом чтобы в первую очередь увеличивались индексы самого правого измерения (последнего), а в последнюю очередь самого левого (первого).
Sub TestForEach();
Var
s: Array Of String = New String[5];
s1: String;
i: Array[0..5, 0..5] Of Integer;
i1: Integer;
Begin
//...
//Заполнение значениями массивов s и i
//...
//Обработка элементов массивов в цикле For Each
For Each s1 In s Do
//Операции с s1
End For;
For Each i1 In i Do
//Операции с i1
End For;
End Sub;
Оператор Repeat выполняет вложенные операторы в зависимости от условия один или более раз.
Оператор выполняется следующим образом:
Управление передается блоку вложенных операторов.
По достижению завершающей точки блока вложенных операторов производится вычисление выражения в условии. Если значение выражения равно False, то управление передается в начало оператора. В противном случае управление передается в завершающую точку оператора.
Внутри оператора Repeat можно использовать оператор Break для выхода из цикла, а также оператор Continue для передачи управления в завершающую точку вложенных операторов цикла и выполнения следующей итерации работы цикла.
Sub TestRepeat();
Var
b: boolean;
Begin
Repeat
//Выполняемый в цикле код
If < Условие выхода из цикла > Then
b := True;
End If;
Until b;
End Sub;
Оператор While выполняет вложенные операторы в зависимости от условия ноль или более раз.
Оператор выполняется следующим образом:
Вычисляется выражение в условии цикла.
Если значение выражения равно True, то управление передается блоку вложенных операторов. После окончания выполнения блока (возможно в результате выполнения оператора Continue) управление передается в начало оператора.
Если значение выражения равно False, то управление передается в завершающую точку оператора.
Внутри оператора While можно использовать оператор Break для выхода из цикла, а также оператор Continue для передачи управления в завершающую точку вложенных операторов цикла и выполнения следующей итерации работы цикла.
Sub TestWhile();
Var
b: boolean;
Begin
b := True;
While b Do
If < Условие выхода из цикла > Then
b := False;
End If;
End While;
End Sub;
См. также: