Шаг 12.
Условные конструкции if и unless

    На этом шаге мы рассмотрим условные конструкции.

    Perl является императивным языком программирования: его программа состоит из последовательности операторов, определяющих некоторые действия. Оператор – это завершённая конструкция интерпретатору на выполнение определённого действия. Все операторы языка Perl делятся на простые и составные. Простой оператор представляет собой выражение, возможно, снабженное модификатором. Составной оператор определяется в терминах блоков (о таких конструкциях мы поговорим позднее).

    Каждый оператор имеет возвращаемое значение. Для простого оператора – это значение вычисляемого в нём выражения, для составного оператора – значение последнего вычисленного в нём оператора.

    С этого шага мы начнем рассматривать простые операторы, в частности, условные конструкции, а также поясним понятие модификатора.

    Простой оператор, снабженный модификатором if, имеет следующий общий вид:

      <ВЫРАЖЕНИЕ> if <УСЛОВИЕ>;

Выражение, стоящее перед if, выполняется тогда, когда проверяемое условие является истинным. Используя, например, синтаксис языка программирования Паскаль, эту конструкцию можно записать следующим образом:

      if <УСЛОВИЕ> then <ВЫРАЖЕНИЕ>;

    Модификатор unless является прямой противоположностью if: простой оператор выполняется, если проверяемое условие является ложным. Общий вид такой конструкции следующий:

      <ВЫРАЖЕНИЕ> unless <УСЛОВИЕ>;

На Паскале эта конструкция будет выглядеть так:

      if not  <УСЛОВИЕ> then <ВЫРАЖЕНИЕ>;

    Приведем пример использования модификаторов if и unless при решении квадратного уравнения.

# Решение квадратного уравнения a*x**2+b*x+c=0 (* - умножение, ** - 
# возведение в степень).
$a=<STDIN>;   # Ввод коэффициентов с клавиатуры
$b=<STDIN>;
$c=<STDIN>;
$d=$b**2 – 4*$a*$c;           # Вычисление дискриминанта уравнения.
# Вычисление корней, если дискриминант положителен.
( $x1 = (-$b+sqrt $d)/$a/2, $x2 = (-$b-sqrt $d)/$a/2) unless $d < 0;
# Печать результатов.
print “Коэффициенты: a=$a b=$b c=$c”;
# Вывод, если определена переменная $x1 (выражение выполняется 
# справа налево).
print “\tРешение: \n \t$x1\t$x2”  if  defined  $x1;
# Вывод, если не определена переменная $x (выражение выполняется 
# справа налево).
print “\tРешения нет!”  unless  defined  $x1;
Текст этого примера можно взять здесь.

    Модификатор unless используется в операторах вычисления корней и печати сообщения об отсутствии решения. Обратите внимание, что в операторе печати проверяется, определена ли переменная $x1, а будет она определена только в случае положительности дискриминанта $d. В конструкции if оператора печати корней уравнения также проверяется, определена ли переменная $x1.

    Таким образом, если какая-то конструкция (условная или циклическая) относится только к одному оператору, то она называется модификатором. Если эта конструкция влияет на несколько операторов (на блок операторов), то она называется оператором. В дальнейшем, чтобы избегать путаницы, мы везде будем пользоваться термином оператор.

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




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