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