04.05.09, 13:46, "Andrew Shitov" <[email protected]>:
> > Задумался тут о своей нелюбови к unless-у (особенно к блочной форме),
> А я наоборот люблю. Если есть необходимость сделать действия if/else,
> причем else будет выполняться с большей вероятностью, то обычно
> стараюсь написать unless/else, чтобы более вероятное действие
> оказалось в коде выше.

Дело вкуса или тема для холивора, как уже правильно заметили. Но могу 
попытаться объяснить причину своей не любви.
Не раз уже замечал, что при чтении кода if-ы мой "внутренний парзер perl" 
сглатывает быстро, unless же обычно вызывает остановку сканирования кода и 
повторное считывание. :) 
Самое худшее - когда в unless длинное логическое условие или отрицательное 
логическое выражение, тогда unless еще сильнее проигрывает if-у в 
"производительности" при разборе. Так что, если мне хочется чтобы более 
вероятное условие в ветвлении было сверху, то я скорее напишу "if not", чем 
unless. 
Думал это у меня одного так, но оказывается нет. Тот же Конвей в PBP пишет о 
том, что отрицательные условия (aka unless, until) хуже 
распознаются/интерпретируются (человеком) и предлагает сократить их 
использование, оставив в простых постфиксных формах и блочной форме без else.

> Еще один типичный случай: функции типа get_tag_id(key), которая
> возвращает id чего-то из базы, и создает новую запись, если подходящей
> записи там нет.
> my $id = sql(select id from tags where);
> unless ($id) {
>    sql(insert into);
>    $id = sql(select last_insert_id);
> }
> return $id;
> Опять же, в циклах удобно писать next unless /\d/.

Это как раз те случаи, которые меня не "анноят" (и не предаются анафеме в PBP 
:) и не вызывают задержек при чтении кода :)
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить