Spec-Zone.ru › Ada 2005
Справочник по Ada 2005

5.5 Операторы цикла

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

Синтаксис

loop_statement ::=
[loop_идентификатор_оператора:]
[схема_итерации] loop
последовательность_операторов
end loop [loop_идентификатор];
iteration_scheme ::= while условие
| for спецификация_параметра_цикла
loop_parameter_specification ::=
идентификатор_объявления in [reverse] определение_подтипа_дискретного_типа
Если оператор цикла имеет loop_идентификатор_оператора, то идентификатор должен быть повторён после end loop; в противном случае идентификатор после end loop отсутствует.

Статическая семантика

Спецификация_параметра_цикла объявляет параметр цикла, который является объектом, подтип которого определён определением_подтипа_дискретного_типа.

Динамическая семантика

При выполнении оператора цикла, последовательность операторов выполняется многократно, ноль или более раз, до тех пор, пока оператор цикла не завершится. Оператор цикла завершается, когда происходит передача управления, которая выводит управление из цикла, или, в случае схемы итерации, как указано ниже.
При выполнении оператора цикла со схемой итерации while, условие оценивается перед каждым выполнением последовательности операторов; если значение условия равно True, последовательность операторов выполняется; если False, выполнение оператора цикла завершается.
При выполнении оператора цикла со схемой итерации for, спецификация_параметра_цикла сначала обрабатывается. Эта обработка создаёт параметр цикла и обрабатывает определение_подтипа_дискретного_типа. Если определение_подтипа_дискретного_типа определяет подтип с пустым диапазоном, выполнение оператора цикла завершается. В противном случае последовательность операторов выполняется один раз для каждого значения дискретного подтипа, определённого определением_подтипа_дискретного_типа (или до тех пор, пока цикл не будет оставлен в результате передачи управления). Перед каждой такой итерацией соответствующее значение дискретного подтипа присваивается параметру цикла. Эти значения присваиваются в порядке возрастания, если зарезервированное слово reverse не присутствует, в противном случае значения присваиваются в порядке убывания.
ПРИМЕЧАНИЯ
5 Параметр цикла является константой; его нельзя обновлять в последовательности операторов цикла (см. 3.3).
6 Объявление объекта не должно задаваться для параметра цикла, так как параметр цикла автоматически объявляется спецификацией_параметра_цикла. Область видимости параметра цикла простирается от спецификации_параметра_цикла до конца оператора цикла, а правила видимости таковы, что параметр цикла виден только внутри последовательности операторов цикла.
7 Определение_подтипа_дискретного_типа цикла for обрабатывается только один раз. Использование зарезервированного слова reverse не изменяет определённый дискретный подтип, так что следующие схемы итерации не эквивалентны; первая имеет пустой диапазон.
for J in reverse 1 .. 0
for J in 0 .. 1

Примеры

Пример оператора цикла без схемы итерации:
loop
Get(Current_Character);
exit when Current_Character = '*';
end loop;
Пример оператора цикла со схемой итерации while:
while Bid(N).Price < Cut_Off.Price loop
Record_Bid(Bid(N).Price);
N := N + 1;
end loop;
Пример оператора цикла со схемой итерации for:
for J in Buffer'Range loop -- работает даже с пустым диапазоном
if Buffer(J) /= Space then
Put(Buffer(J));
end if;
end loop;
Пример оператора цикла с именем:
Summation:
while Next /= Head loop -- см. 3.10.1
Sum := Sum + Next.Value;
Next := Next.Succ;
end loop Summation;





Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API