Шаг 19.
Команда next

    На этом шаге мы рассмотрим использование команды next.

    Ее общий вид:

  next ИДЕНТИФИКАТОР_МЕТКИ;

    Команда next позволяет пропустить расположенные после нее в теле цикла операторы и перейти на следующую итерацию цикла. Если оператор цикла содержит блок continue, то его операторы выполняются до проверки условия окончания цикла, с которой начинается следующая итерация. Одно из применений этой команды — обработать определенные элементы массива, ничего не делая с другими. Программа следующего примера присваивает всем элементам массива, содержащим четные числа, символ звездочка "*".

   @array = (2, 5, 8, 4, 7, 9);
   print “До: @array\n”;      # Вывод элементов массива
   foreach (@array) {         # Цикл по элементам массива
     next  if   $_ % 2;       # Переход, если число нечётное
     $_ = “*”; 
   }
   print “После: @array\n”;   # Вывод полученного массива
Текст этого примера можно взять здесь.

    Результат выполнения программы:

 До:	2  5  8  4  7  9
 После: *  5  *  *  7  9

    Если элемент массива нечетное число, то результат операции $_ % 2 равен 1 (Истина) и команда next инициирует следующую итерацию цикла foreach, не изменяя значение текущего элемента массива. Если значением элемента массива является четное число, то команда next не выполняется и значение элемента меняется на символ "*".

    Команда next, употребленная совместно с идентификатором метки, прерывает выполнение цикла, в теле которого она находится, и начинает новую итерацию цикла с указанной меткой, выполнив предварительно его блок continue, если таковой имеется:

  $out = 0;
  OUT: while ($out < 2) {
    print "Начало внешнего цикла\п";
     for($in=0; $in<=2;$in++) {
          print "\$out: $out\t\$in: $in\n"; 
          next OUT if $in == 1; 
     }
    print "\$out: $out\n";   # Никогда не выполняется! 
  } continue {
      print "Блок continue внешнего цикла\n"; 
      $out++;
  }
Текст этого примера можно взять здесь.

    Вывод этой программы будет следующим:

Начало внешнего цикла
$out: 0  $in:   0
$out: 0  $in:   1
Блок continue внешнего цикла
Начало внешнего цикла
$out: 1  $in:   0
$out: 1  $in:   1
Блок continue внешнего цикла

    Обратите внимание, что количество итераций внутреннего цикла for равно двум, так как на второй его итерации выполняется команда next OUT, прекращающая его выполнение и инициализирующая выполнение очередной итерации внешнего цикла OUT. Оператор печати этого цикла пропускается, выполняется блок операторов continue, проверяется условие и если оно истинно, то тело цикла выполняется. Таким образом, оператор печати внешнего цикла OUT не выполняется ни одного раза, что подтверждается приведенным выше выводом.

    На следующем шаге мы рассмотрим команду redo.




Предыдущий шаг Содержание Следующий шаг