Поиск

ЦИКЛЫ

В начале этой главы говорилось о том, что принятие решений и условное выполнение кода — не все, что может понадобиться от программы. Иногда еще нужно многократно выполнять некоторый фрагмент кода. Выше, в листинге 3.1, мы рассматривали пример игровой программы угадывания чисел. Было бы неплохо ее усовершенствовать и дать пользователю несколько попыток. Для этого необходимо реализовать условный повтор определенных фрагментов кода, что легко можно сделать с помощью циклов.

Организация циклов с оператором while

ЦИКЛЫ while считаются наиболее простыми. Оператор while повторяет блок кода до тех пор, пока некоторое выражение истинно. Вот синтаксис этого оператора:

while {выражение) БЛОК

Когда интерпретатор Perl встречает оператор while, проверяется выполнение условия. Если выражение истинно, выполняется БЛОКкода. После выполнения всего блока повторно вычисляется значение выражения, если оно истинно, блок повторяется (листинг 3.3).

Проведем анализ программы.

  • Строка 1. Переменной $counter присваивается нулевое значение.
  • Строка 2. Вычисляется значение выражения Scounter < 10. Если оно истинно, выполняется блок кода.
  • Строка 4. Значение переменной $counter увеличивается на единицу.
  • Строка 5. Фигурная скобка } закрывает блок, начинающийся в строке 2 с {. В этот момент Perl возвращается в начало цикла while и заново вычисляет выражение в круглых скобках.
Организация циклов с оператором for

Оператор for — более сложная, но в то же время более универсальная конструкция для организации циклов в Perl. Его синтаксис выглядит так:

for (инициализация; условие; инкремент) БЛОК

Три раздела оператора for, инициализация, условие и инкремент, разделены точками с запятой. Когда Perl встречает оператор for, выполняется следующая последовательность действий.

  • Вычисляется выражение инициализации.
  • Вычисляется выражение, задающее условие окончания цикла. Если оно истинно — выполняется БЛОК кода.
  • После выполнения блока производится приращение счетчика и снова проверяется условие. Если оно по-прежнему истинно, блок кода выполняется повторно. Этот процесс продолжается до тех пор, пока не перестает выполняться условие.

Ниже приведен пример цикла for:

for ( $а=0; $а<10; $а=$а+2 {
print "А равно $аn";
}

Здесь переменной $а присваивается значение 0, затем выполняется проверка условия $а<10, оказавшегося истинным. В теле цикла выводится сообщение. Затем значение переменной $а увеличивается на 2: $а=$а+2. Снова выполняется проверка и цикл. Это продолжается до тех пор, пока $а станет равно 10. В этом случае проверочное условие ложно, и программа выходит из цикла.

Использовать счетчик в операторе for необязательно, цикл будет выполняться до тех пор, пока истинно выражение, задающее условие окончания цикла. Более того, все три части оператора for необязательны, необходимо лишь присутствие двух символов точки с запятой. Например, этот оператор for прекрасно обходится без разделов инициализации и инкремента:

=10; | Инициализация значения переменной цикла
for { ; $i>-l; ) {
print "$i..";
$i—-; | Декремент.
}
print "Цикл окончен! n";