go to previous page   go to home page   go to next page hear noise

Answer:

Any method that returns any type of value can be used in a boolean expression, so side-effects are a concern.


Danger with any Method

For example, say that a method computeMaximum() computes the maximum value of some variables, stores the result in maximum and returns that value:


int sum;
int maximum; // set by computeMaximum()
. . .

if ( sum < 100 && computeMaximum() < 500 )  // maximum might not be computed.
{
  . . .
}
result = 2 * maximum ;  

There is a problem here. The method that follows && sets maximum (as a side effect) only when sum is less than 100. The assignment statement will sometimes put the wrong value in result. You should arrange the expression like this:

int sum;
int maximum;
. . .

if ( computeMaximum() < 500 && sum < 100 ) 
{
  . . .
}
result = 2 * maximum ;

With this arrangement the side effect of computeMaximum() will always happen. The two if statements look almost identical; however, the first one is a bug (probably). Bugs like this can be hard to find.

The best solution is to write computeMaximum() so that it has no side effect, then use it like this:

int sum;
int maximum;
. . .
maximum = computeMaximum();

if ( maximum < 500 && sum < 100 ) 
{
  . . .
}
result = 2 * maximum ;  

QUESTION 4:

Would it be useful to have a non-short-circuit AND operator?