12 > 6 || 18 > 1 ------ true
Ausdruck | Ergebnis | Reihenfolge der Ausertung |
---|---|---|
true || true | true | Nur der erste Operand wird ausgewertet |
false || true | true | beide Operanden werden ausgewertet |
true || false | true | Nur der erste Operand wird ausgewertet |
false || false | false | beide Operanden werden ausgewertet |
true | true | true | beide Operanden werden ausgewertet |
false | true | true | beide Operanden werden ausgewertet |
true | false | true | beide Operanden werden ausgewertet |
false | false | false | beide Operanden werden ausgewertet |
Vielleicht habt Ihr bemerkt, dass zur Beantwortung der Frage nur der erste Operand ausgewertet werden musste:
12 > 6 || 18 > 1 ------ true
Ergibt die Auswertung dieses ersten Operanden true
so muss der
Ausdruck nicht weiter ausgewertet werden. Egal was über den Operator OR mit dem Operanden true
verknüpft wird:
Der Gesamtausdruck ist true
.
Der ||
-Operator ist ebenfalls ein Short-Circuit Operator. Da der OR-Operator true
ergibt, wenn einer der beiden Operatoren oder beide true
sind, wird die Short-Circuit Auswertung nach dem ersten true
beendet.
Genau wie für die AND-Verknüpfung existiert für OR ein Non-Short-Circuit Operator: |
(ein einzelner senkrechter Strich). Wird dieser Operator verwendet, so werden beide Operanden ausgewertet, unabhängig von deren Ergebnissen. Der Short-Circuit Operator macht das Folgende:
UmX||Y
auszuwerten, wird zunächstX
berechnet. IstX
true
, kann die weitere Auswertung abgebrochen werden: Der ganze Ausdruck isttrue
. IstX
false
, wirdY
ausgewertet und die beiden Ergebnisse entsprechend der Boole'schen Vorschrift für die OR-Operation verknüpft.
Wie auch beim Short-Circuit AND ist beim Short-Circuit OR darauf zu achten, dass eventuelle Operationen Seiteneffekte haben können.
Was ergibt die Auswertung des folgenden Ausdrucks:
(4 < 8 ) && (12 <= 40 ) && (50 > 1)