Dart поддерживает все операторы из таблицы ниже, таблица отсортирована по убыванию приоритета
| Категория | Операторы | Ассоциативность |
|---|---|---|
| Постфиксные унарные операторы | expr++ expr-- () [] ?[] . ?. ! | Нет |
| Префиксные унарные операторы | - expr ! expr ~ expr ++ expr -- expr await expr | Нет |
| Умножение и деление | * / % ~/ | Левая |
| Сложение и вычитание | + - | Левая |
| Побитовые сдвиги | << >> >>> | Левая |
| Побитовое И | & | Левая |
| Побитовое XOR | ^ | Левая |
| Побитовое ИЛИ | | | Левая |
| Сравнение и проверка типов | >= > <= < as is is! | Нет |
| Проверка равенства | == != | Нет |
| Логическое И | && | Левая |
| Логическое ИЛИ | || | Левая |
| Оператор объединения null | ?? | Левая |
| Тернарный условный оператор | expr1 ? expr2 : expr3 | Правая |
| Каскадные операторы | .. ?.. | Левая |
| Операторы присваивания | = *= /= += -= &= ^= и др. | Правая |
| Оператор раскрытия (см. примечание) | ... ...? | Нет |
Используя эти операторы вместе с операндами, можно составлять выражения вычислений
Примеры:
a++
a + b
a = b
a == b
c ? a : b
a is T
Ниже полный рабочий пример:
void main() {
// 1. Постфиксный инкремент a++
int a = 10;
print("1. Постфиксный инкремент a++");
print("До инкремента a = $a");
int temp = a++; // Сначала берет значение, потом увеличивает
print("temp (полученное значение) = $temp");
print("После инкремента a = $a\n");
// 2. Выражение сложения a + b
int b = 20;
int sum = a + b;
print("2. Сложение a + b");
print("$a + $b = $sum\n");
// 3. Присваивание a = b
a = b;
print("3. Присваивание a = b");
print("После присваивания a = $a\n");
// 4. Проверка равенства a == b
bool isEqual = a == b;
print("4. Проверка равенства a == b");
print("Результат a == b: $isEqual\n");
// 5. Тернарное выражение c ? a : b
int c = 5;
String result = c > 0 ? "c положительное число" : "c отрицательное или ноль";
print("5. Тернарный оператор c ? a : b");
print("Проверка c>0: $result\n");
// 6. Проверка типа a is T
dynamic testVal = 100;
print("6. Проверка типа a is T");
print("testVal is int: ${testVal is int}");
print("testVal is String: ${testVal is String}");
}
Code language: Dart (dart)
Скопируйте код и запустите командой: dart run
Основные правила приоритета операторов
1. Логика приоритета
В таблице приоритет снижается сверху вниз: операторы верхних строк выполняются раньше нижних.
Пример: знак > означает «имеет выше приоритет», не сравнение величин.
Порядок выполнения: остаток от деления % > сравнение равенства == > логическое И &&
Разбор выражения n % i == 0 && d % i == 0:
- Сначала вычисляются
n % i,d % i(у%самый высокий приоритет) - Затем два сравнения
== - В последнюю очередь выполняется логическое И
&&

2 Роль скобок
Скобки ((n % i == 0) && (d % i == 0)) только улучшают читаемость, не меняют порядок вычислений;
Вариант без скобок n % i == 0 && d % i == 0 работает по стандартному приоритету, оба варианта полностью эквивалентны по логике и результату;
Примечание: скобки изменяют порядок выполнения только тогда, когда нужно нарушить стандартный приоритет.
void main() {
int n = 10;
int d = 20;
int i = 2;
// Вариант 1: со скобками, читаемость выше
if ((n % i == 0) && (d % i == 0)) {
print("Вариант 1: делится без остатка");
}
// Вариант 2: без скобок, работает по приоритету, результат одинаковый
if (n % i == 0 && d % i == 0) {
print("Вариант 2: делится без остатка");
}
}
Результат выполнения:
Вариант 1: делится без остатка
Вариант 2: делится без остатка