Kurzschlussauswertung
Kurzschlussauswertung (auch bedingte Auswertung, englisch
)[1] ist ein Begriff aus der Informatik und bezeichnet eine Strategie der Auswertung von booleschen Ausdrücken. Im Allgemeinen steht das Ergebnis eines booleschen Ausdrucks ohne die Verwendung von Kurzschlussauswertung erst nach der Auswertung aller Teilausdrücke fest. Kurzschlussauswertung ermöglicht das vorzeitige Abbrechen einer Auswertung eines booleschen Ausdrucks, sobald das Auswertungsergebnis durch einen Teilausdruck eindeutig bestimmt ist.
Die Konjunktion im Ausdruck
soll von links nach rechts ausgewertet werden. Hat den Wert „wahr“, so muss zudem ausgewertet werden, um den Wert für bestimmen zu können. Falls jedoch den Wert „falsch“ hat, steht bereits fest, dass der Gesamtausdruck nicht mehr den Wert „wahr“ annehmen kann. Die Auswertung kann also an dieser Stelle abgebrochen werden, ohne auswerten zu müssen.
Im Gegensatz zur Auswertung einer Konjunktion steht bei Disjunktion das Gesamtergebnis bereits nach dem ersten „wahren“ Teilausdruck fest.
Verschiedene Programmiersprachen verwenden die Kurzschlussauswertung als Mittel zur Optimierung. Auf die mitunter rechenintensive Auswertung komplexerer Teilausdrücke kann dadurch oft verzichtet werden. Auch bedingt auftretende Ausführungsfehler können auf diese Weise unterdrückt werden.
Beispiel anhand eines Algorithmus in Pseudocode
Das folgende Beispiel zeigt einen Anwendungsfall für Kurzschlussauswertung.
Setze A := 0 Setze B := 10
if (A != 0) AND ((B / A) >= 5) then An dieser Stelle im Algorithmus konnte B durch A geteilt werden. else An dieser Stelle ist der Quotient (B / A) echt kleiner als 5 oder eine Division durch 0 wurde verhindert endif
Die Auswertung des booleschen Ausdrucks wird im Fall, dass die Variable A den Wert 0 beinhaltet, nach der Prüfung auf Ungleichheit A != 0 abgebrochen. Dadurch, dass der erste Teilausdruck zu „falsch“ ausgewertet wurde, steht das Resultat der Konjunktion AND bereits eindeutig fest. So kann verhindert werden, dass der zweite Teilausdruck ausgewertet wird, sodass keine Division durch 0 ausgeführt wird.
Kurzschlussauswertung in Programmiersprachen
In der Programmiersprache C werden binäre boolesche Ausdrücke mit den Operatoren && und || ausschließlich nach dem Kurzschluss-Prinzip ausgewertet.
In der Programmiersprache Java stehen die Operator && und || ebenfalls für eine Kurzschlussauswertung. Zusätzlich existieren jedoch die logischen Operatoren & und |, bei denen die Auswertung beider Seiten erzwungen wird.
Auch in Modula-2 sind die logischen Operatoren AND und OR Kurzschlussoperatoren.