Ce type d'évaluation est appelée de court-circuit.
Une fois que le résultat est 100% clair, il ne veut pas continuer à évaluer.
C'est en fait une commune de la technique de programmation.
Par exemple, en C++, vous verrez souvent quelque chose comme:
if (pX!=null && pX->predicate()) { bla bla bla }
Si vous avez changé l'ordre des conditions, vous pourriez être l'invocation d'une méthode sur un pointeur null et de s'écraser. Un exemple similaire en C serait d'utiliser le terrain d'un struct lorsque vous avez un pointeur vers cette structure.
Vous pourriez faire quelque chose de similaire avec ou:
if(px==null || pX->isEmpty()} { bla bla bla }
C'est aussi l'une des raisons pour laquelle il est généralement une bonne idée pour éviter les effets secondaires dans une condition if.
Par exemple, supposons que vous avez:
if(x==4 && (++y>7) && z==9)
Si x est de 4, alors y sera incrémenté quelle que soit la valeur de z ou y, mais si elle n'est pas 4, il ne sera pas incrémenté à tous.