Шаг 15.
Циклы while и until

    На этом шаге мы начнем знакомиться с операторами цикла.

    Цикл while предназначен для повторного вычисления блока операторов, пока остается истинным заданное в нём выражение-условие. Его общий синтаксис имеет две формы:

   [МЕТКА:] while (<ВЫРАЖЕНИЕ>) <БЛОК>
   [МЕТКА:] while (<ВЫРАЖЕНИЕ>) <БЛОК> continue <БЛОК1>

    Все операторы цикла могут быть снабжены не обязательными метками. В Perl метка представляет правильный идентификатор, завершающийся двоеточием. Пример:

$i = 1;
while ($i<=3) {
    $a[$i] = 1/$i;         # Присвоить значение элементу массива.
    ++$i;
}
print “Переменная цикла \$i = $i\n”;  # $i = 4
print “Массив \@a: @a\n”;             # @a = (1, 0.5, 0.333333333333)
Текст этого примера можно взять здесь.

    Вместо ключевого слова while можно использовать ключевое слово until. В этом случае управляющая конструкция называется циклом until, который отличается от цикла while тем, что его тело выполняется, только если проверяемое условие ложно. Пример:

$i = 1;
until ($i > 3) {
    $a[$i] = 1/$i;              # Присвоить значение элементу массива.
    ++$i;
}
print “Переменная цикла \$i = $i\n”;  # $i = 4
print “Массив \@a: @a\n”;             # @a = (1, 0.5, 0.333333333333)
Текст этого примера можно взять здесь.


    Замечание. Обратим внимание на то, что в теле цикла должны присутствовать операторы, вычисление которых приводит к изменению выражения условия. Обычно это операторы, изменяющие значения переменных, используемых в выражении условия. Если этого не происходит, то цикл while или until будет выполняться бесконечно.

    Блок операторов БЛОК1, задаваемый после ключевого слова continue, выполняется всякий раз, когда осуществляется переход на выполнение новой итерации. Это происходит после выполнения последнего оператора тела цикла или при явном переходе на следующую итерацию цикла командой next. Блок continue на практике используется редко, но с его помощью можно строго определить цикл for через оператор цикла while.

    Следующий пример демонстрирует использование цикла while для вычисления степеней двойки не выше шестнадцатой. В этом примере оператор цикла while функционально эквивалентен циклу for. Блок continue выполняется всякий раз по завершении очередной итерации цикла, увеличивая переменную $i на единицу. Он эквивалентен выражению увеличения/уменьшения оператора for.

# Вычисление степеней числа 2.
$i = 1;
while ($i <= 16) {
print  "2 в степени  $i: ", 2**$i, "\n"; }   
  continue   {
     ++$i;       # Увеличение переменной  $i 
}                # перед выполнением следующей итерации.
Текст этого примера можно взять здесь.

    На следующем шаге мы продолжим изучение циклических конструкций.




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