Does an if-statement with an && operator check for the second parameter if the first one is false / NO?
Would the following be able to crash?
NSDictionary *someRemoteData = [rawJson valueForKey:@"data"];
if( [someRemoteData isKindOfClass:[NSDictionary class]] && someRemoteData.count > 0 ){
//..do something
}
Please no simple yes or no answer, but explain why.
No, it does not evaluate the expression after learning that the answer is going to be
NO. This is called short-circuiting, and it is an essential part of evaluating boolean expressions in C, C++, Objective C, and other languages with similar syntax. The conditions are evaluated left to right, making the evaluation scheme predictable.The same rule applies to the
||operator: as soon as the code knows that the value isYES, the evaluation stops.Short-circuiting lets you guard against invalid evaluation in a single composite expression, rather than opting for an
ifstatement. For example,would have resulted in undefined behavior if it were not for short-circuiting. But since the evaluation skips evaluation of
array[index]whenindexis invalid, the above expression is legal.