Logische Operatoren - 1

„Hallo, Amigo!“

„Jetzt haben wir eine kleine Lektion über logische Operatoren.“

„Welche logischen Operatoren kennen Sie?“

— ODER (||), UND (&&), NICHT(!)

„Ja. Gute Arbeit. Und erinnerst du dich, wie sie funktionieren?“

"Ja."

„OR ergibt wahr, wenn mindestens ein Operand wahr ist.“

„AND ergibt wahr, wenn beide Operanden wahr sind.“

„NICHT ändert sich wahr zu falsch und falsch zu wahr.“

„Das stimmt. Und in welcher Reihenfolge werden die Operatoren in diesem Ausdruck ausgewertet?“

boolean a = true;
boolean b = false;
boolean c = true;

boolean result = a && b || !c && b || !a;

„Das ist alles ganz einfach.“

„Zuerst NOT (!), dann AND (&&) und dann OR (||) ganz am Ende.“

Wenn wir Klammern hinzufügen würden, würden wir Folgendes erhalten:

boolean a = true;
boolean b = false;
boolean c = true;

boolean result = (a && b) || ((!c) && b) || (!a);

„Das ist alles richtig, gut gemacht. Und was ist das Ergebnis?“

— 1) (a && b) == (wahr && falsch) == falsch

2) ((!c) && b) == (false && false) == false

3) (!a) == falsch

4) falsch || falsch || falsch == falsch

„Das Ergebnis ist falsch.“

„Es scheint, dass du das Thema perfekt kennst. Dann verrate ich dir ein paar kleine Geheimnisse.“

„Zuerst werden logische Ausdrücke von links nach rechts ausgewertet.“

„Zweitens wird hier die Kurzschlussauswertung verwendet (Berechnungen werden nur bei Bedarf durchgeführt). Wenn das Endergebnis bereits aus der Auswertung eines Teils des Ausdrucks bekannt ist, wird der Rest des Ausdrucks nicht ausgewertet.“

Beispiel
boolean result = (true && false) || (true && true) || (true && false);

„Dieser Ausdruck ist in drei Teile unterteilt, die durch den OR-Operator (||) getrennt sind.“

„Wenn mindestens ein Teil wahr ist, dann ist die Antwort wahr und nichts anderes muss berücksichtigt werden. Dementsprechend wird der Ausdruck wie folgt ausgewertet:“

1)  Werten Sie den ersten Teil aus:  (wahr && falsch) == falsch

2)  Bewerten Sie den zweiten Teil:  (wahr && wahr) == wahr

3) Wir bewerten den dritten Teil nicht, da bereits klar ist, dass die Antwort wahr sein wird .

„Dieser Ansatz wird auch Lazy Evaluation genannt.“

„OK. Und was ist das Besondere daran?“

„Nichts – bis Sie anfangen, Methoden innerhalb des Ausdrucks aufzurufen. Wenn ein Teil des Ausdrucks übersprungen wird, werden die Methoden im übersprungenen Teil nicht aufgerufen.“

„Aber dieser Ansatz ist mittlerweile weit verbreitet. Hier ist der Grund:“

Beispiel:
Job job = null;

if (job != null && job.isDone())
{
…
}

„Wenn job bei der Auswertung des Ausdrucks null ist, findet der Aufruf von job.isDone() nicht statt!“

„Tatsächlich ist der erste Teil des Ausdrucks falsch, worauf ein UND (&&) folgt. Somit ist bekannt, dass der gesamte Ausdruck falsch ist, und der zweite Teil ist nicht erforderlich.“

„Genau. Es ist eine gute Technik, oder?“

"Ja."