Standard Pascal Systemen wird nachgesagt, daß sie keine Shortcuts bei der Auswertung von Ausdrücken, welche die logischen Operatoren NOT, AND, OR enthalten, vornehmen.
Extended Pascal stellt spezielle Shortcut-Operatoren (short circuit operators) zur Verfügung:
AND_THEN logisches Und OR_ELSE logisches OderDie Arbeitsweise ist folgende:
Mit diesen Operatoren wird - bei komplizierteren Ausdrücken - eine Einsparung von Rechenzeit möglich. Zum anderen kann aber auch das eventuelle Auftreten von Programmausnahmen bei der weiteren Auswertung von Ausdrücken von vornherein unterbunden werden.
Es besteht jedoch eine Gefahr:
Sind die unterdrückten Operationen nicht nebenwirkungsfrei, so
können Probleme auftreten, wenn die "Nebenwirkungen" wesentlich sind.
Auf diese Gefahr sollte besonders dann geachtet werden, wenn die Ausdrücke
Funktionsaufrufe enthalten.
Beispiel (Extended Pascal):
PROGRAM shortcut(OUTPUT);
FUNCTION f(x: REAL) : REAL;
BEGIN
f := x;
Writeln(' f called');
END;
VAR x : REAL VALUE 6.6;
y : REAL VALUE 5.5;
z : REAL VALUE 7.7;
BEGIN
IF ( x > y ) AND_THEN ( y > f(z) ) THEN { f wird aufgerufen }
Writeln('True')
ELSE
Writeln('False');
IF ( x < y ) AND_THEN ( y > f(z) ) THEN { f wird nicht aufgerufen }
Writeln('True')
ELSE
Writeln('False');
IF ( x > y ) OR_ELSE ( y > f(z) ) THEN { f wird nicht aufgerufen }
Writeln('True')
ELSE
Writeln('False');
IF ( x < y ) OR_ELSE ( y > f(z) ) THEN { f wird aufgerufen }
Writeln('True')
ELSE
Writeln('False');
END.
Beispiel:
IF ( y <> 0 ) AND ( x DIV y ) THEN ...;Es droht bei y = 0 eine Division durch Null, wenn das Shortcut-Verfahren nicht angewendet wird.
IF ( y <> 0 ) AND_THEN ( x DIV y ) THEN ...;Die Division wird bei y = 0 nicht ausgeführt.
Turbo Pascal, Delphi
Mittels Compiler-Option kann festgelegt werden, wie die Auswertung logischer Ausdrücke erfolgt:
$B- shortcut Standard $B+ volle AuswertungIn Turbo Pascal gilt dieses Standardverhalten ab der Version 6.0