Базовые бинарные арифметические операторы
Используются для вычислений между двумя числами, всего 7 видов, включая стандартные четыре действия, целочисленное деление, остаток от деления, унарный минус
| Оператор | Описание действия |
|---|---|
+ | Сложение |
- | Вычитание |
-выражение | Унарный минус (инверсия знака числа) |
* | Умножение |
/ | Обычное деление, результат всегда имеет тип double (дробное число) |
~/ | Целочисленное деление, отбрасывает дробную часть, возвращает int |
% | Остаток от деления (остаток целочисленного деления) |
Особенность деления по сравнению с другими языками: оператор / всегда возвращает дробное число. Если нужно целое число — используйте ~/, это важный момент для разработчиков с опытом программирования.
Пример кода:
void main() {
// Проверка сложения, вычитания, умножения, деления, целочисленного деления и остатка
print(2 + 3 == 5);
print(2 - 3 == -1);
print(2 * 3 == 6);
print(5 / 2 == 2.5); // Обычное деление даёт double
print(5 ~/ 2 == 2); // Целочисленное деление возвращает только целую часть int
print(5 % 2 == 1); // % возвращает остаток от целочисленного деления
// Пример конкатенации строк с результатом деления и остатка
print('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
}Code language: Dart (dart)
Результат выполнения кода

Операторы инкремента / декремента
Dart поддерживает префиксные и постфиксные варианты инкремента ++ и декремента --. Основное различие: сначала изменить переменную или сначала взять её значение
| Оператор | Логика выполнения | Значение, возвращаемое выражением |
|---|---|---|
++var | Сначала увеличить переменную на 1, затем использовать новое значение в вычислениях | Новое значение после инкремента |
var++ | Сначала взять исходное значение переменной для вычислений, затем увеличить переменную на 1 | Исходное значение до инкремента |
--var | Сначала уменьшить переменную на 1, затем использовать новое значение в вычислениях | Новое значение после декремента |
var-- | Сначала взять исходное значение переменной для вычислений, затем уменьшить переменную на 1 | Исходное значение до декремента |
void main() {
int a;
int b;
// 1. Префиксный инкремент ++a: сначала увеличить, затем присвоить
a = 0;
b = ++a;
print(a == b); // a=1, b=1, условие истинно
// 2. Постфиксный инкремент a++: сначала присвоить старое значение, затем увеличить
a = 0;
b = a++;
print(a != b); // a=1, b=0, условие истинно
// 3. Префиксный декремент --a: сначала уменьшить, затем присвоить
a = 0;
b = --a;
print(a == b); // a=-1, b=-1, условие истинно
// 4. Постфиксный декремент a--: сначала присвоить старое значение, затем уменьшить
a = 0;
b = a--;
print(a != b); // a=-1, b=0, условие истинно
}
Code language: PHP (php)
Все выводы в примере будут true (истина)
Важно: префиксная и постфиксная запись ++ / — ведут себя по-разному внутри выражений.
Если оператор используется отдельно:
int a = 1;
++a;
int b = 1;
b++;
print(a);
print(b);Code language: PHP (php)
В данном случае обе переменные будут равны 2 на выходе
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
2
2
Code language: CSS (css)
То же самое касается —: переменная в любом случае изменится на +1 или -1.
Но если ++ / — входят в состав сложного выражения:
void main() {
int a = 5;
// Постфикс: сначала использовать 5 для умножения, потом a станет 6
int res1 = a++ * 2;
print(res1); // 10
print(a); // 6
int b= 5;
// Префикс: сначала b станет 6, потом умножить на 2
int res2 = ++b * 2;
print(res2); // 12
print(b); // 6
}Code language: PHP (php)
Итоговые значения a и b одинаковые (6), но результаты res1 и res2 разные, несмотря на небольшую разницу в записи оператора.
Объяснение постфикса a++: сначала выполняется a*2 =10 (a всё ещё равен 5), результат записывается в res1, затем a увеличивается на единицу до 6.
При префиксной записи ++b сначала b увеличивается до 6, потом выполняется умножение 6*2=12, которое попадает в res2.
Запись int res1 = a++ * 2; эквивалентна последовательности:
int res1 = a * 2;
a = a +1;
Запись int res2 = ++b * 2; эквивалентна последовательности:
b = b+1;
int res2 = b * 2;

Простое мнемоника:
Префикс — сначала изменить, постфикс — сначала использовать;
Префикс возвращает новое значение, постфикс — исходное.
Итог
Префикс ++a / --a: сначала изменить переменную, затем использовать новое значение для вычислений или присваивания
Постфикс a++ / a--: сначала взять исходное значение переменной для вычислений или присваивания, после завершения операции изменить переменную
Попробуйте запустить следующие примеры для закрепления:
void main() {
int a = 0;
int b = ++a;
// Шаг1: a = a + 1 → a = 1
// Шаг2: присвоить новое значение a (1) в b
print(a); // 1
print(b); // 1
}
void main() {
int a = 0;
int b = a++;
// Шаг1: присвоить старое значение a (0) в b
// Шаг2: выполнить a = a + 1 → a = 1
print(a); // 1
print(b); // 0
}
void main() {
int a = 0;
int b = --a;
// Шаг1: a = a - 1 → a = -1
// Шаг2: присвоить новое значение a (-1) в b
print(a); // -1
print(b); // -1
}
void main() {
int a = 0;
int b = a--;
// Шаг1: присвоить старое значение a (0) в b
// Шаг2: выполнить a = a - 1 → a = -1
print(a); // -1
print(b); // 0
}
Это простейшие примеры префиксных и постфиксных инкремента/декремента. Скомпилируйте и запустите код самостоятельно, чтобы увидеть разницу в работе.