Оператор redo
Третий способ передачи управления в блоке цикла — оператор redo. Эта конструкция обеспечивает переход в начало текущего блока (без повторного вычисления контрольного выражения):
while (условие) {
# redo передает управление в эту точку программы
ЧТО-ТО;
ЧТО-ТО;
ЧТО-ТО;
if {условие) {
какие-то действия;
какие-то действия;
redo;
еще_что-то;
еще_что-то;
еще что-то;
}
*
Если в данном цикле есть оператор continue, который мы не рассматривали, next переходит в начало блока continue, а не в конец блока цикла. Это практически одно и то же.
Блок if здесь тоже не учитывается; считаются только циклообразующие блоки.
Пользуясь оператором redo, оператором last и "голым" блоком, можно построить бесконечный цикл, образующийся внутри блока:
( -...,. .
начальные_действия;
начальные_действия;
на чалы1ые_действия;
if (условие) ( last;
} последующк1е_действия;
последух1щие_действия;
последухщие_действия;
redo;
}
Такая схема годится для while-подобного цикла, некоторая часть которого должна выполняться как инициализационная перед первой проверкой. (В разделе "Модификаторы выражений"
мы покажем, как можно использовать оператор if с меньшим числом знаков препинания.)