Dart поддерживает все распространенные арифметические операции. В арифметических операциях участвуют числами. Есть бинарные арифметические операции (производятся над двумя операндами) и унарные (выполняются над одним операндом). К бинарным операциям относят следующие:
+
операция сложения двух чисел:
int a = 10; int b = 7; int c = a + b; // 17 int d = 4 + b; // 11
-
операция вычитания двух чисел:
int a = 10; int b = 7; int c = a - b; // 3 int d = 4 - a; // -6
*
операция умножения двух чисел
int a = 10; int b = 7; int c = a * b; // 70 int d = b * 5; // 35
/
операция деления двух чисел:
int a = 20; int b = 5; double c = a / b; // 4.0 double d = 22.5 / 4.5; // 5.0
При делении стоит учитывать, что результат операции всегда представляет тип double.
~/
операция целочисленного деления двух чисел. Результат операции всегда представляет тип int:
int a = 33; int b = 5; int c = a ~/ b; // 6 int d = 22 ~/ 4; // 5
%
получение остатка от деления двух чисел:
int a = 33; int b = 5; int c = a % b; // 3 int d = 22 % 4; // 2 (22 - 4*5 = 2)
Также есть две унарные арифметические операции, которые производятся над одним числом: ++ (инкремент) и -- (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная:
++ (префиксный инкремент)
Предполагает увеличение переменной на единицу, например, z=++y
(вначале значение переменной y увеличивается на 1,
а затем ее значение присваивается переменной z)
int a = 8; int b = ++a; print(a); // 9 print(b); // 9
++ (постфиксный инкремент)
Также представляет увеличение переменной на единицу, например, z=y++
(вначале значение переменной y присваивается
переменной z, а потом значение переменной y увеличивается на 1)
int a = 8; int b = a++; print(a); // 9 print(b); // 8
-- (префиксный декремент)
уменьшение переменной на единицу, например, z=--y
(вначале значение переменной y уменьшается на 1,
а потом ее значение присваивается переменной z)
int a = 8; int b = --a; print(a); // 7 print(b); // 7
-- (постфиксный декремент)
z=y--
(сначала значение переменной y присваивается переменной z, а затем значение переменной y уменьшается на 1)
int a = 8; int b = a--; print(a); // 7 print(b); // 8
Одни операции имеют больший приоритет чем другие и поэтому выполняются вначале. Операции в порядке уменьшения приоритета:
++ (постфиксный инкремент), -- (постфиксный декремент)
++ (префиксный инкремент), -- (префиксный декремент)
* (умножение), / (деление), % (остаток от деления)
+ (сложение), - (вычитание)
Приоритет операций следует учитывать при выполнении набора арифметических выражений:
int a = 8; int b = 7; int c = a + 5 * ++b; print(c); // 48
Вначале будет выполняться операция инкремента ++b
, которая имеет больший приоритет - она увеличит значение переменной b и возвратит его в
качестве результата. Затем выполняется умножение 5 * ++b
, и только в последнюю очередь выполняется сложение a + 5 * ++b
Скобки позволяют переопределить порядок вычислений:
int a = 8; int b = 7; int c = (a + 5) * ++b; print(c); // 104
Хотя операция сложения имеет меньший приоритет, но вначале будет выполняться именно сложение, а не умножение, так как операция сложения заключена в скобки.