Циклы позволяют выполнять определённый блок кода пока выполняется какое-либо условие. В Fore имеются следующие виды циклов:
Оператор For обеспечивает циклическое повторение вложенной в него последовательности операторов пока не достигнуто конечное значение счётчика. Синтаксис цикла For:
For
<Expression1> To <Expression2> Step <Expression3> Do
End For;
Схема работы оператора следующая. При первом вхождении в цикл вычисляются значения выражений expression1, expression2 и expression3. Значения всех выражений должны быть целого типа. В выражении expression1 указывается какая-либо переменная (счётчик цикла) и её начальное значение. Затем, пока счётчик не превысит значения expression2, выполняется последовательность операторов внутри цикла. Счётчик цикла увеличивается на значение expression3 (или на 1, если ключевое слово Step пропущено). Если значение expression3 отрицательное, то счетчик будет уменьшаться с каждой итерацией цикла пока не станет меньше значения expression2. При достижении счетчиком значения expression2 операторы в цикле выполняются последний раз и управление передается следующему за ключевыми словами End For оператору.
Примечание. Если выражение expression3 при вычислении принимает значение 0, то генерируется исключительная ситуация.
Sub ForSample;
Var
a, b: Integer;
Begin
a := 1;
b := 1;
For a := 1 To 3 Do
b := b * a
End For;
End Sub ForSample;
Sub ForStepSample;
Var
a, b: Integer;
Begin
a := 1;
b := 1;
For a := 1 To 10 Step 2 Do
b := b + a
End For;
End Sub ForStepSample;
Оператор For Each обеспечивает циклическое повторение вложенной в него последовательности операторов для каждого элемента коллекции или массива.
Синтаксис цикла For Each:
For Each <variable> In <array> Do
End For;
Цикл For Each выполняется, если в коллекции есть хотя бы один элемент. После начала выполнения цикла, операторы выполняются для первого элемента коллекции, значение которого помещается в переменную <variable>; если в коллекции существуют еще элементы, то операторы в цикле выполняются последовательно для всех элементов. Когда элементов более нет, цикл прекращается и управление передается оператору, расположенному непосредственно после ключевых слов End For.
Данный оператор оптимизирован для работы с массивом элементов справочников, реализуемым интерфейсом IDimElementArray. В результате работы в цикле будут возвращаться номера элементов справочников, содержащихся в коллекции.
Sub ForEachSample;
Var
d: Double;
Arr: Array Of Double;
TabSheetBox1: TabSheetBox;
Begin
Arr := TabSheetBox1.Source.GetTabSheet.ParseRange("А0:К0").ToDoubleArray(True);
For Each d In Arr Do
Debug.Write(d.ToString + " ");
End For;
End Sub ForEachSample;
После выполнения примера в консоль будут выведены значения всех не пустых ячеек в диапазоне «А0:К0».
Sub ForEachDimArray;
Var
MB: IMetabase;
DimInst: IDimInstance;
Elem: IDimElementArray;
i: Integer;
Begin
MB := MetabaseClass.Active;
DimInst := MB.ItemById("D_TO").Open(Null) As IDimInstance;
Elem := DimInst.RootElements;
For Each i In Elem Do
Debug.Write(i.ToString + " ");
End For;
End Sub ForEachDimArray;
После выполнения примера в консоль будут выведены индексы всех корневых элементов справочника с идентификатором «D_TO».
Оператор Repeat обеспечивает циклическое повторение вложенной в него последовательности операторов до тех пор, пока не станет истинно значение выражения, указанного после ключевого слова Until. Значение выражения проверяется после выполнения последовательности операторов. Значение выражения должно быть совместимым с типом Boolean.
Sub RepeatSample;
Var
a, b, c: Integer;
Begin
a := 1;
b := 4;
c := 2;
Repeat
b := b + b * 5 - 25 * c - 3;
a := a + 1;
Until a = 10
End Sub RepeatSample;
Оператор While обеспечивает циклическое повторение вложенной в него последовательности операторов до тех пор, пока истинно значение выражения, указанное между ключевыми словами While и Do. Значение выражения проверяется до выполнения последовательности операторов. Значение выражения должно быть совместимым с типом Boolean.
Sub WhileSample;
Var
a, b, c: Integer;
Begin
a := 1;
b := 4;
c := 2;
While a < 10 Do
b := b + b * 5 - 25 * c - 3;
a := a + 1;
End While;
End Sub WhileSample;
См. также: