Справочник Ada 95
5.7 Операторы exit
Оператор exit_statement используется для завершения выполнения вложенного оператора loop_statement; завершение условное, если оператор exit_statement содержит условие condition.
Синтаксис
exit_statement ::=
exit [имя_цикла] [when condition];
exit [имя_цикла] [when condition];
Правила разрешения имен
Имя имя_цикла, если оно присутствует в операторе exit_statement, должно указывать на оператор loop_statement.
Правила легальности
Каждый оператор exit_statement применяется к оператору loop_statement; это оператор loop_statement, который завершается. Оператор exit_statement с именем допустим только внутри оператора loop_statement, обозначаемого этим именем, и применяется к этому оператору loop_statement. Оператор exit_statement без имени допустим только внутри оператора loop_statement и применяется к самому внутреннему из вложенных. Оператор exit_statement, применяемый к данному оператору loop_statement, не должен появляться внутри тела или оператора accept_statement, если этот конструкт сам по себе вложен в данный оператор loop_statement.
Динамические семантика
При выполнении оператора exit_statement сначала вычисляется условие condition, если оно есть. Если значение условия condition истинно, или если условия condition нет, управление передаётся для завершения оператора loop_statement. Если значение условия condition ложно, передача управления не происходит.
ПРИМЕЧАНИЯ
9 Несколько вложенных циклов могут быть завершены оператором exit_statement, который указывает имя внешнего цикла.
Примеры
Примеры циклов с операторами exit:
for N in 1 .. Max_Num_Items loop
Get_New_Item(New_Item);
Merge_Item(New_Item, Storage_File);
exit when New_Item = Terminal_Item;
end loop;
Get_New_Item(New_Item);
Merge_Item(New_Item, Storage_File);
exit when New_Item = Terminal_Item;
end loop;
Main_Cycle:
loop
-- начальные операторы
exit Main_Cycle when Found;
-- заключительные операторы
end loop Main_Cycle;
loop
-- начальные операторы
exit Main_Cycle when Found;
-- заключительные операторы
end loop Main_Cycle;