EMZETT.
Login

Logical Operators (Logische Operatoren)

Kurz: Operatoren, die mehrere Wahrheitswerte (oft Ergebnisse von Vergleichen) miteinander verknüpfen — UND (&&), ODER (||) und NICHT (!).

Genauer: && liefert nur dann wahr, wenn BEIDE Seiten wahr sind; || reicht schon, wenn EINE Seite wahr ist. Die meisten Sprachen werten dabei “kurzschlüssig” aus (Short-Circuit Evaluation): Bei && wird die zweite Bedingung gar nicht erst geprüft, wenn die erste schon falsch ist, weil das Gesamtergebnis dann ohnehin feststeht — das lässt sich gezielt nutzen, um teure oder riskante Prüfungen zu vermeiden.

Im Detail

Die Wahrheitstabellen der drei Grundoperatoren:

wahr  && wahr   -> wahr
wahr  && falsch -> falsch
falsch && falsch -> falsch
 
wahr  || wahr   -> wahr
wahr  || falsch -> wahr
falsch || falsch -> falsch
 
!wahr   -> falsch
!falsch -> wahr

Die Short-Circuit-Auswertung ist mehr als eine reine Performance-Optimierung — sie wird aktiv als Sprachmittel genutzt, um Fehler zu vermeiden:

// Ohne Short-Circuit würde der zweite Teil bei null einen Fehler werfen
if (nutzer !== null && nutzer.alter >= 18) {
    // nutzer.alter wird NUR geprüft, wenn nutzer garantiert nicht null ist
}

Wäre nutzer null, würde nutzer.alter sonst einen Laufzeitfehler auslösen (Zugriff auf ein Feld eines nicht-existierenden Objekts) — dank Short-Circuit wird dieser zweite Teil aber gar nicht erst ausgewertet, weil nutzer !== null bereits falsch ergeben hat und && damit ohnehin falsch liefern MUSS.

Ein häufiger Anfängerfehler bei mehreren logischen Operatoren in einer Bedingung ist falsche Klammerung — a && b || c wird nicht unbedingt so gelesen, wie man es intuitiv erwartet, da && in den meisten Sprachen eine höhere Priorität als || hat (siehe Operator-Priorität) und daher zuerst ausgewertet wird. Explizite Klammern ((a && b) || c) machen die Absicht eindeutig und ersparen Debugging-Zeit.

XOR: das seltener genutzte vierte Grundoperator

Neben UND/ODER/NICHT gibt es noch das “exklusive ODER” (XOR), das nur dann wahr liefert, wenn GENAU EINE der beiden Seiten wahr ist — nicht beide, nicht keine. In den meisten höheren Programmiersprachen gibt es dafür keinen eigenen logischen Operator (anders als bei UND/ODER), stattdessen wird XOR meist über den bitweisen Operator (z. B. ^) oder eine Ungleichheitsprüfung zwischen zwei booleschen Werten (a != b) nachgebildet, da beide bei booleschen Werten dasselbe Ergebnis liefern.

Sprachübergreifende Notation

Die konkrete Syntax für logische Operatoren unterscheidet sich zwischen Sprachen: &&/||/! in den meisten C-artigen Sprachen (Java, JavaScript, C++), aber and/or/not als ausgeschriebene Schlüsselwörter in Python. Das zugrundeliegende Konzept (Kurzschlussauswertung, Wahrheitstabellen) bleibt dabei über alle Sprachen identisch — nur die Notation unterscheidet sich.

Siehe auch: Comparison Operators, Operatoren, if…else, Operator-Priorität