Тернарный оператор ?:Когда Ларри выбирал, какие операторы должны быть доступны в 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"; # По умолчанию В действительности конструкция состоит из трех вложенных операторов ?:. Статьи из раздела Perl на эту тему: ![]() ![]() ![]() ![]() ![]() Вернуться в раздел: Perl / 9. Другие управляющие конструкции
|