This is a Short Circuit

In the previous part , we saw the operators for doing Boolean AND, OR and NOT. In this part, we're going to look at one particular aspect of these operators. That feature is called short-circuiting . The term short circuiting means that we don't evaluate the second part of an AND or OR unless we really need to. So for example, if we have an expression like:
if(a < b && c < d)

we don't bother evaluating the c < d part if a is not less than b since it doesn't matter what c and d 's relationship are; the condition is false no matter what. Similarly if we have
if(a < b || c < d)

we don't need to evaluate c < d if a is less than b since the OR will be true regardless of what c and d are.

The importance of this feature is not just that it avoids unnecessary computation. The main thing is that if the second part of such an expression has side effects, they won't always take place. For example,


if(a < b && f(a, b))

will only execute the function f() if a is less than b .

Rule of Thumb

The main thing to get from this feature for now is the following rule of thumb:
Unless you are intentionally taking advantage of the short-circuiting when using && or || , don't put anything with side-effects on the right hand side.

What is the value of x after
x = 7;
y = 15;
if(x == 7 || y == x++)
   if(y == 15 && x < 8)
      x = 12;
   else
      x = 13;
else
   if(x > y || y < 100)
      x = 14;
   else
      x = 15;

12

13

14

15