Operatoren in Dart

Dart unterstützt alle in der unten stehenden Tabelle aufgeführten Operatoren, die Tabelle ist nach absteigender Priorität sortiert

KategorieOperatorenAssoziativität
Postfix-einstellige Operatorenexpr++ expr-- () [] ?[] . ?. !Keine
Präfix-einstellige Operatoren- expr ! expr ~ expr ++ expr -- expr await exprKeine
Multiplikation und Division* / % ~/Linksassoziativ
Addition und Subtraktion+ -Linksassoziativ
Bitverschiebung<< >> >>>Linksassoziativ
Bitweises UND&Linksassoziativ
Bitweises XOR^Linksassoziativ
Bitweises ODER|Linksassoziativ
Vergleich und Typüberprüfung>= > <= < as is is!Keine
Gleichheitsvergleich== !=Keine
Logisches UND&&Linksassoziativ
Logisches ODER||Linksassoziativ
Null-Koaleszenzoperator??Linksassoziativ
Ternärer Bedingungsoperatorexpr1 ? expr2 : expr3Rechtsassoziativ
Kaskadenoperatoren.. ?..Linksassoziativ
Zuweisungsoperatoren= *= /= += -= &= ^= u.a.Rechtsassoziativ
Spread-Operator (siehe Hinweis)... ...?Keine

Mithilfe der obigen Operatoren zusammen mit Operanden lassen sich Berechnungsausdrücke bilden

Einfache Beispiele:

a++
a + b
a = b
a == b
c ? a : b
a is T

Im Folgenden ein vollständiger lauffähiger Beispielcode:

void main() {
  // 1. Postfix-Inkrementausdruck a++
  int a = 10;
  print("1. Postfix-Inkrement a++");
  print("Vor Inkrement a = $a");
  int temp = a++; // Zuerst Wert auslesen, dann erhöhen
  print("temp (ausgelesener Wert) = $temp");
  print("Nach Inkrement a = $a\n");

  // 2. Additionsausdruck a + b
  int b = 20;
  int summe = a + b;
  print("2. Addition a + b");
  print("$a + $b = $summe\n");

  // 3. Zuweisungsausdruck a = b
  a = b;
  print("3. Zuweisung a = b");
  print("Nach Zuweisung a = $a\n");

  // 4. Gleichheitsvergleich a == b
  bool gleich = a == b;
  print("4. Gleichheitsvergleich a == b");
  print("Ergebnis von a == b: $gleich\n");

  // 5. Ternärer Bedingungsausdruck c ? a : b
  int c = 5;
  String ergebnis = c > 0 ? "c ist positive Zahl" : "c ist negativ oder Null";
  print("5. Ternärer Operator c ? a : b");
  print("Prüfung c>0: $ergebnis\n");

  // 6. Typüberprüfung a is T
  dynamic testWert = 100;
  print("6. Typüberprüfung a is T");
  print("testWert ist int: ${testWert is int}");
  print("testWert ist String: ${testWert is String}");
}
Code-Sprache: Dart (dart)

Kopieren Sie den obigen Code und führen Sie ihn mit dem Befehl aus: dart run

Kernregeln zur Operatorpriorität

1. Logik der Prioritätsreihenfolge

Die Operatortabelle weist von oben nach unten fallende Priorität auf: Operatoren in oberen Zeilen haben höhere Priorität und werden zuerst ausgeführt.

Beispiel: Das Zeichen > bedeutet „hat höhere Priorität“, keinen Größenvergleich.

Ausführungsreihenfolge: Modulo % > Gleichheitsvergleich == > Logisches UND &&

Aufschlüsselung der Ausführung des Ausdrucks n % i == 0 && d % i == 0:

  1. Zuerst werden n % i, d % i berechnet (% hat höchste Priorität)
  2. Dann folgen die beiden Gleichheitsvergleiche ==
  3. Zuletzt wird das mittlere logische UND && ausgeführt
2 Bedeutung von Klammern

Klammern ((n % i == 0) && (d % i == 0)) verbessern lediglich die Lesbarkeit des Codes, sie ändern die ursprüngliche Ausführungsreihenfolge nicht;

Die Variante ohne Klammern n % i == 0 && d % i == 0 arbeitet nach nativer Priorität, beide Code-Teile haben identische Logik und Ergebnisse;

Zusatzhinweis: Nur wenn die Standardpriorität durchbrochen werden muss, ändern Klammern die Ausführungsreihenfolge.

void main() {
  int n = 10;
  int d = 20;
  int i = 2;

  // Schreibweise 1: mit Klammern, besser lesbar
  if ((n % i == 0) && (d % i == 0)) {
    print("Schreibweise 1: restlos teilbar");
  }

  // Schreibweise 2: ohne Klammern, nutzt native Priorität, Ergebnis identisch
  if (n % i == 0 && d % i == 0) {
    print("Schreibweise 2: restlos teilbar");
  }
}

Ausgabeergebnis:

Schreibweise 1: restlos teilbar
Schreibweise 2: restlos teilbar

Schreibe einen Kommentar

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