Sometimes, an if
statement can be rather complicated or long, so for the sake of readability it is better to extract complicated calls before the if
.
e.g. this:
if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall())
{
// do stuff
}
into this
bool b1 = SomeComplicatedFunctionCall();
bool b2 = OtherComplicatedFunctionCall();
if (b1 || b2)
{
//do stuff
}
(provided example is not that bad, it's just for illustration... imagine other calls with multiple arguments, etc.)
But with this extraction I lost the short circuit evaluation (SCE).
- Do I really lose SCE every time? Is there some scenario where the compiler is allowed to "optimize it" and still provide SCE?
- Are there ways of keeping the improved readability of the second snippet without losing SCE?