[Moscow.pm] if $var and $var==

Maxim Vuets maxim.vuets на gmail.com
Пн Дек 23 07:46:06 PST 2013


2013/12/23 Nick Knutov <mail на knutov.com>:
>
> Как можно коротко и красиво переписать этот кусок?
> $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==0

По-моему, это условие не имеет смысла:
-   если значение 0, то первая часть условия не выполнится;
-   если значение истинно, то оно не может быть 0, т.е. вторая часть
не выполнится.

Вот это имеет больше смысла:

    $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==1
    # или
    defined $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==0
    # или
    exists $ha->[$i]->{is_main} and $ha->[$i]->{is_main}==0

Как вариант, короче можно записать так:

    ($ha->[$i]->{is_main} // 0) == 1

где 0 --- значение по-умолчанию, если оно имеет место быть;
иначе любое несуществующее значение, что бы избежать предупреждения
"uninitialized".

Последний вариант не рекомендую. Если у вас ситуация все же такая
когда нужно отличать 0, undef и отсутсвие ключа в хеше --- напишите
вспомогательную функцию.


Подробная информация о списке рассылки Moscow-pm