Kurzschlussauswertung
Kurzschlussauswertung (auch bedingte Auswertung, englisch short-circuit evaluation)[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
BearbeitenDas 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
BearbeitenIn den Programmiersprachen C und C++ werden binäre boolesche Ausdrücke mit den Operatoren && und || ausschließlich nach dem Kurzschluss-Prinzip ausgewertet.[2][3]
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.
Siehe auch
BearbeitenEinzelnachweise
Bearbeiten- ↑ Peter Hofer, Peter Fischer: Lexikon der Informatik. 15. Auflage. Springer, Berlin 2010, ISBN 3-642-15125-6, S. 81 (eingeschränkte Vorschau in der Google-Buchsuche).
- ↑ Logical operators - cppreference.com. Abgerufen am 31. Mai 2024.
- ↑ Logical operators - cppreference.com. Abgerufen am 31. Mai 2024.
Literatur
Bearbeiten- Michael L. Scott: Programming Language Pragmatics. 3. Auflage. Elsevier LTD, Oxford 2009, ISBN 0-12-374514-4, S. 239 (eingeschränkte Vorschau in der Google-Buchsuche).