Dart Logische Operatoren

Logische Operationen verarbeiten ausschließlich Boolesche Werte (true /false). Sie dienen zur Prüfung, ob eine Bedingung erfüllt ist. Es gibt nur zwei mögliche Ergebnisse: true (wahr, Bedingung erfüllt), false (falsch, Bedingung nicht erfüllt).

Sämtliche if-Abfragen, Bedingungen von while- und for-Schleifen sowie switch-Fälle basieren intern vollständig auf logischen Berechnungen.

Es existieren drei zentrale Operatoren: UND, ODER, NICHT

OperatorBezeichnungFunktionsbeschreibung
&&Logisches UNDErgebnis ist nur dann true, wenn beide Seiten true sind; Kurzschlussauswertung aktiv
||Logisches ODERErgebnis ist sofort true, wenn mindestens eine Seite true ist; Kurzschlussauswertung aktiv
!exprLogisches NICHT (Negation)Kehrt einen booleschen Wert um: true wird zu false, false zu true

UND, ODER und NICHT funktionieren ähnlich wie Reihen- und Parallelschaltungen aus dem Physikunterricht der Mittelstufe. Die Reihenschaltung entspricht dem UND, die Parallelschaltung dem ODER.

1. Logisches NICHT !

Negiert den Wert eines einzelnen booleschen Ausdrucks.

Syntax:

!boolescherAusdruck

Beispiel

void main() {
  bool isMale = false;
  print(!isMale); // true

  bool flag = true;
  print(!flag); // false
}Code-Sprache: PHP (php)

Ursprünglich haben isMale den Wert false und flag den Wert true; durch die Negation erhalten wir jeweils den entgegengesetzten Wert.

Man kann den Operator auch auf komplette Ausdrücke anwenden, zum Beispiel

void main() {
  int age = 12;
  print(!(age>18)); // true
}Code-Sprache: JavaScript (javascript)

Der Ausdruck age > 18 ergibt zunächst false, durch das vorangestellte ! wird der Wert umgekehrt und true ausgegeben.

2. Logisches UND &&

AusdruckErgebnis
true && truetrue
true && falsefalse
false && truefalse
false && falsefalse

Nur wenn beide Seiten true sind, ist das Ergebnis true; ist eine Seite false, lautet das Ergebnis stets false.

Eigenschaft der Kurzschlussauswertung: Ist die linke Seite false, wird der Code auf der rechten Seite nicht ausgeführt und sofort false zurückgegeben.

Nur wenn beide Schalter geschlossen sind (true), leuchtet die Lampe (true). Ist auch nur einer geöffnet (false), bleibt die Lampe aus (false). Wenn die linke Seite bereits false ist, braucht die rechte nicht mehr geprüft zu werden.

void main() {
  bool fun1() {
    print("Die Funktion wurde ausgeführt!");
    return true;
  }

  bool left = false;
  // Linker Wert ist false, daher wird fun1() nicht ausgeführt
  bool res = left && fun1();
  print("Endergebnis: $res");
}Code-Sprache: PHP (php)

Ausgabeergebnis

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Endergebnis: false
Code-Sprache: JavaScript (javascript)

Selbst wenn fun1 Fehler oder Ausnahmen enthalten würde, treten diese nicht auf, da die Funktion niemals ausgeführt wird.

Anwendungsbeispiel für logisches UND

void main() {
  String name = 'admin';
  String password = '123321';

  // &&: Bedingung trifft nur zu, wenn beide Seiten true sind
  if (name=='admin' && password =='456654') {
    print("Login erfolgreich");
  } else {
    print("Benutzername oder Passwort falsch");
  }
}Code-Sprache: JavaScript (javascript)

Ausgabeergebnis

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Benutzername oder Passwort falschCode-Sprache: CSS (css)

3. Logisches ODER ||

Ist die linke Seite true, wird der Code rechts nicht ausgeführt und sofort true zurückgegeben.

AusdruckErgebnis
true || truetrue
true || falsetrue
false || truetrue
false || falsefalse

Sehen wir uns ein Beispiel an

void main() {
  bool fun1() {
    print("Funktion ausgeführt");
    return true;
  }
  // Linker Wert true, Kurzschlussauswertung greift, fun1() läuft nicht
  bool res = true || fun1();
  print(res); // true
}Code-Sprache: PHP (php)

Da die linke Seite von || true ist, wird die Funktion fun1 rechts nicht ausgeführt.

Bei zwei Schaltern leuchtet die Lampe bereits, wenn nur einer geschlossen ist (true).

void main() {
        bool isParentAgree = true;
	int age = 12;
	if(age>=13 || isParentAgree){
	  print("Eintritt erlaubt");
	}
}Code-Sprache: JavaScript (javascript)

Zusammenfassung

A && B: Ist A false, wird direkt false zurückgegeben, B wird weder geprüft noch ausgeführt

A || B: Ist A true, wird direkt true zurückgegeben, B wird weder geprüft noch ausgeführt

Dies verbessert die Ausführungsgeschwindigkeit und verhindert Laufzeitfehler (häufig bei null-Prüfungen eingesetzt)

Beispiel:

String? name;
// Nur wenn name nicht null ist, wird length aufgerufen; Kurzschluss schützt vor Null-Fehler
if(name != null && name.length > 0) 
{

}Code-Sprache: JavaScript (javascript)

Würde man direkt name.length aufrufen, würde ein Fehler auftreten, da name null ist und keine Eigenschaft length besitzt. Durch die vorherige Prüfung name != null: ist name null, ist die erste Bedingung false, der Rest wird nicht ausgeführt und es entsteht kein Fehler.

Priorität der drei logischen Operatoren

! > && > ||

Wie bei mathematischen Berechnungen werden Operatoren mit höherer Priorität zuerst berechnet. Um die Reihenfolge zu ändern, nutze Klammern ().

if (!done && (col == 0 || col == 3)) {
  // ...Beliebige Aktion ausführen...
}Code-Sprache: JavaScript (javascript)

Detaillierte Berechnungsreihenfolge:

  1. Innerhalb der Klammern: Zuerst col == 0 || col == 3 berechnen (Prüfung ob die Spalte 0 oder 3 ist)
  2. Negation mit !done durchführen
  3. Beide Ergebnisse mit && verknüpfen

Beispiel

void main() {
  bool done = false;
  int col = 3;

  // Offizielles Beispiel
  if (!done && (col == 0 || col == 3)) {
    print("Logik ausgeführt: Nicht abgeschlossen und Spalte ist 0 oder 3");
  }

  // Demonstration logisches NICHT !
  bool isFinish = true;
  print(!isFinish); // false

  // Demonstration logisches UND &&
  int a = 10, b = 20;
  if (a > 5 && b > 10) {
    print("a ist größer als 5 UND b größer als 10");
  }

  // Demonstration logisches ODER ||
  int score = 55;
  if (score < 60 || score > 90) {
    print("Note ungenügend ODER ausgezeichnete Note");
  }

  // Demonstration Kurzschlussauswertung
  bool func() {
    print("Funktion wurde ausgeführt");
    return true;
  }
  false && func(); // Linker Wert false, func wird nicht ausgegeben
  true || func(); // Linker Wert true, func wird nicht ausgegeben
}Code-Sprache: PHP (php)

Ausgabeergebnis

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Logik ausgeführt: Nicht abgeschlossen und Spalte ist 0 oder 3
false
a ist größer als 5 UND b größer als 10
Note ungenügend ODER ausgezeichnete NoteCode-Sprache: JavaScript (javascript)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert