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||Yauszuwerten, wird zunächstXberechnet. IstXtrue, kann die weitere Auswertung abgebrochen werden: Der ganze Ausdruck isttrue. IstXfalse, wirdYausgewertet 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)