if-Anweisung - Kurzschlussauswertung gegen Lesbarkeit

Manchmal ein if - Anweisung kann sein eher kompliziert oder zu lang, so dass aus Gründen der besseren Lesbarkeit ist es besser, zu extrahieren kompliziert ruft, bevor die if.

z.B. dieser:

if (SomeComplicatedFunctionCall() || OtherComplicatedFunctionCall())
{
    //do stuff
}

in diesem

bool b1 = SomeComplicatedFunctionCall();
bool b2 = OtherComplicatedFunctionCall();

if (b1 || b2)
{
    //do stuff
}

(Beispiel ist nicht dass schlecht, es ist nur eine illustration... vorstellen, dass auch andere Anrufe mit mehreren Argumenten, etc).

Aber mit dieser Extraktion verlor ich den short-circuit-evaluation (SCE).

  1. Kann ich wirklich verlieren, SCE, jedes mal? Gibt es irgendein Szenario, wo der compiler erlaubt ist, zu "optimieren" und trotzdem SCE?
  2. Gibt es Möglichkeiten, um die verbesserte Lesbarkeit der zweite snippet ohne SCE?

InformationsquelleAutor der Frage relaxxx | 2016-10-17

Schreibe einen Kommentar