Во время недавнего процесса собеседования я представил пример кода Perl, в котором использовался так называемый "секретный" !!
оператор. Позже, обсуждая код, один из интервьюеров спросил меня, почему я решил использовать это, и указал, что он считается плохим. Он не уточнил, почему.
Моя команда и я используем этот оператор в течение многих лет, никогда не понимая, что это считается "плохой формой".
Имеет ли оператор "bang bang" побочные эффекты или другое неожиданное поведение? Почему это или может быть, что-то считается "плохой формой"? Есть ли идиоматическая альтернатива?
Ниже приведены несколько примеров, где я мог бы считать !!
приемлемым и/или желательным.
-
Фактический код в упражнении для кодирования, который является примером добавления булевых:
while (my $line = <$F>) { # snip exists $counts{lines} and $counts{lines} += !! chomp $line; }
-
Использование логического значения в качестве хэш-ключа (явно упрощенного примера):
sub foo { my ($input) = @_; my %responses = ( '' => "False", 1 => "True" ); return $responses{ !! $input }; }
-
Использование логического в побитовом режиме или даже
pack()
:sub foo { my ( $a, $b, $c ) = @_; my $result = !!$a + (!! $b)<<1 + (!! $c)<<2; return $result; }
-
Вам нужно сделать typecast для использования внешней библиотекой/процессом, например, с базой данных, которая считает только определенные значения правными:
my $sth = $dbh->prepare("INSERT INTO table (flag,value) VALUES (?,?)") $sth->execute("i_haz_cheeseburger", !! $cheeseburger_string)