Тернарный оператор ?:

Когда Ларри выбирал, какие операторы должны быть доступны в Perl, он не захотел обижать бывших программистов C, поэтому в Perl были перенесены все операторы C. А это означало, что в Perl переносится и самый запутанный оператор C – тернарный оператор ?:. Впрочем при всей запутанности он может быть весьма полезен. Тернарный оператор напоминает проверку ifQthenQelse, упакованную в одно выражение. Оператор называется «тернарным», потому что он получает три операнда. Оператор выглядит примерно так:

выражение ? выражение_для_true : выражение_для_false

Сначала Perl вычисляет первое выражение и определяет, истинно оно или ложно. При истинном результате используется второе подвыражение, а при ложном – третье. Каждый раз вычисляется только одно из двух «правых» выражений, а другое игнорируется. Иначе говоря, если первое выражение истинно, то вычисляется второе подвыражение, а третье игнорируется. Если первое выражение ложно, то второе выражение игнорируется, а третье вычисляется как общий результат. В этом примере результат вызова функции &is_weekend определяет, какое выражение будет присвоено переменной:

my $location = &is_weekend($day) ? "home" : "work";

А здесь мы вычисляем и выводим среднее значение или строку-заполнитель из дефисов, если данные отсутствуют:

my $average = $n ? ($total/$n) : "-----";
print "Average: $average\n";

Любое использование оператора ?: можно переписать в виде структуры if, но часто с потерей удобства и компактности:

my $average;
if ($n) {
$average = $total / $n;
} else {
$average = "-----";
}
print "Average: $average\n";

А вот полезный прием, который может использоваться для кодирования удобного разветвленного выбора:

my $size =
($width < 10) ? "small" :
($width < 20) ? "medium" :
($width < 50) ? "large" :
"extra-large"; # По умолчанию

В действительности конструкция состоит из трех вложенных операторов ?:.


Когда вы поймете суть происходящего, все становится вполне очевидно. Конечно, вы не обязаны использовать тернарный оператор. Например, новичкам стоит держаться от него подальше. Но рано или поздно вы встретите тернарный оператор в чужом коде, и мы надеемся, что у вас появятся веские причины для того, чтобы использовать его в своих программах.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Автоинкремент и автодекремент
Значение автоинкремента
Значение ускоренного логического оператора
Логические операторы
Метки блоков