Операторы Dart

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:

  1. Сначала вычисляются n % i, d % i% самый высокий приоритет)
  2. Затем два сравнения ==
  3. В последнюю очередь выполняется логическое И &&
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: делится без остатка

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *