Этот тип оценки называется короткое замыкание .
Как только результат становится ясным на 100%, он не продолжает оценку.
Это на самом деле распространенная техника программирования.
Например, в C ++ вы часто видите что-то вроде:
if (pX!=null && pX->predicate()) { bla bla bla }
Если вы изменили порядок условий, вы можете вызывать метод с нулевым указателем и вылетать. Аналогичный пример в C будет использовать поле структуры, когда у вас есть указатель на эту структуру.
Вы можете сделать что-то подобное с или:
if(px==null || pX->isEmpty()} { bla bla bla }
Это также одна из причин, по которой обычно рекомендуется избегать побочных эффектов в условиях if.
Например, предположим, что у вас есть:
if(x==4 && (++y>7) && z==9)
Если x
равно 4
, то y
будет увеличиваться независимо от значения z
или y
, но если x
не равно 4
, оно вообще не будет увеличиваться .