Dart unterstützt alle in der unten stehenden Tabelle aufgeführten Operatoren, die Tabelle ist nach absteigender Priorität sortiert
| Kategorie | Operatoren | Assoziativität |
|---|---|---|
| Postfix-einstellige Operatoren | expr++ expr-- () [] ?[] . ?. ! | Keine |
| Präfix-einstellige Operatoren | - expr ! expr ~ expr ++ expr -- expr await expr | Keine |
| 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 Bedingungsoperator | expr1 ? expr2 : expr3 | Rechtsassoziativ |
| 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:
- Zuerst werden
n % i,d % iberechnet (%hat höchste Priorität) - Dann folgen die beiden Gleichheitsvergleiche
== - 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