Dart включает в себя широкий спектр операторов и выражений, которые используются для выполнения различных вычислений и преобразований данных. Эти операторы и выражения являются важными инструментами для создания эффективных программ в Dart, и понимание их использования имеет важное значение для овладения языком.
В этой статье мы рассмотрим различные типы операторов и выражений, доступных в Dart, и их использование.
Арифметические операторы
Арифметические операторы используются для выполнения математических операций с числовыми типами данных, такими как целые числа и числа с плавающей запятой. Четырьмя основными арифметическими операторами в Dart являются:
- Сложение (+): складывает два значения
- Вычитание (-): вычитает два значения
- Умножение (*): умножает два значения
- Деление (/): делит два значения
Например, чтобы сложить два целых числа вместе, вы можете использовать следующий код:
int a = 5;
int b = 10;
int sum = a + b;
Оператор взятия остатка
В Dart оператор остатка обозначается символом %. Он используется для нахождения остатка после деления двух целых чисел.
Вот пример:
int a = 10;
int b = 3;
int result = a % b;
print(result); // Получим: 1
В приведенном выше примере у нас есть две целочисленные переменные a и b. Мы используем оператор остатка %, чтобы найти остаток от a, деленный на b, который равен 10 % 3. Результатом этой операции является значение 1, которое сохраняется в переменной result. Наконец, мы выводим значение result на консоль с помощью функции print().
Вот пример использования оператора остатка с отрицательными целыми числами:
int a = -10;
int b = 3;
int result = a % b;
print(result); // Получим: -1
В этом примере у нас есть отрицательное целое число a и положительное целое число b. Оператор остатка % работает с отрицательными целыми числами так же, как и с целыми положительными числами. В этом случае результат a % b равен -1, который также сохраняется в переменной result.
Таким образом, оператор остатка % в Dart используется для нахождения остатка после деления двух целых чисел. Его можно использовать с положительными или отрицательными целыми числами, но не с числами с плавающей запятой.
Операторы сравнения
Операторы сравнения используются для сравнения двух значений и возврата логического результата. Шесть операторов сравнения, доступных в Dart, следующие:
- Равно (==)
- Не равно (!=)
- Больше, чем (>)
- Меньше, чем (<)
- Больше или равно (>=)
- Меньше или равно (<=)
Например, чтобы сравнить два целых числа и проверить, равны ли они, вы можете использовать следующий код:
int a = 5;
int b = 10;
bool isEqual = (a == b);
Точное сравнение
В Dart функция identical() используется для точного сравнения двух объектов. Она проверяет, указывают ли две ссылки на один и тот же объект в памяти.
Функция identical() принимает два аргумента и возвращает логическое значение. Если два аргумента являются ссылками на один и тот же объект в памяти, функция identical() возвращает значение true. В противном случае он возвращает значение false.
Вот пример, который иллюстрирует использование identical() в Dart:
var a = [1, 2, 3];
var b = a;
var c = [1, 2, 3];
print(identical(a, b)); // true
print(identical(a, c)); // false
В этом примере у нас есть три переменные a, b и c. Переменные a и b указывают на один и тот же объект списка в памяти, поэтому identical(a, b) возвращает true. Переменные a и c, однако, указывают на два разных объекта списка в памяти, даже если они имеют одинаковые значения. Следовательно, identical(a, c) возвращает значение false.
Важно отметить, что identical() проверяет только, являются ли два объекта одним и тем же экземпляром в памяти. Он не сравнивает их значения. Для сравнения значений двух объектов вы бы использовали оператор ==.
Таким образом, identical() используется в Dart для точного сравнения объектов, и он возвращает true, если два объекта являются одним и тем же экземпляром в памяти, и false в противном случае.
Логические операторы
Логические операторы используются для выполнения операций над логическими значениями. Тремя логическими операторами, доступными в Dart, являются:
- И (&&): возвращает значение true, если оба операнда имеют значение true
- ИЛИ (||): возвращает значение true, если хотя бы один операнд имеет значение true
- НЕ (!): инвертирует значение логического выражения
Например, чтобы проверить, являются ли оба двух логических выражения истинными, вы можете использовать следующий код:
bool isSunny = true;
bool isWarm = true;
bool isGoodWeather = (isSunny && isWarm);
Условные выражения
Условные выражения используются для выполнения операций на основе условия. В Dart доступны два типа условных выражений:
- if-else: выполняет определенную операцию, если условие истинно, и другую операцию, если условие ложно
- оператор (a ? b : c): выполняет одну операцию, если условие истинно, и другую операцию, если условие ложно
Например, чтобы проверить, является ли число положительным или отрицательным, используя оператор if-else, вы можете использовать следующий код:
int number = 5;
if (number > 0) {
print("The number is positive.");
} else {
print("The number is negative.");
}
В качестве альтернативы вы могли бы использовать троичный оператор для достижения того же результата:
int number = 5;
String result = (number > 0) ? "The number is positive." : "The number is negative.";
print(result);
Заключение
Операторы и выражения являются важными инструментами для создания эффективных программ в Dart. Освоив различные типы операторов и выражений, доступных в Dart, и их использование, вы сможете создавать более сложные и эффективные программы, оптимизированные по производительности и масштабируемости.
А вы сами попробуйте, будете сильно удивлены результату 🙂
А ты можешь объяснить, почему так получилось?)
Ломаю голову, не могу понять логику.
Всё верно. А сколько по вашему должно получиться?!
10/3 = 3 целых и 1 остаток. 3 * 3 + 1 = 10.
-10/3 = -3 целых и -1 остаток. -3 * 3 + (-1) = -10.
А, вы цитировали пример, и по факту другой результат получается. Сразу не понял.
В общем, разобрался в вопросе. В Дарте есть два разных способа нахождения остатка от деления. Знак % использует т.н. Евклидово деление. В таком случае остаток от деления будет всегда положительным. Подробнее: https://api.dart.dev/stable/3.3.2/dart-core/num/operator_modulo.html
В нашем случае он как бы перекрывает переменную а в отрицательную бесконечность:
-10 / 3 = -4 * 3 + 2.
Если же нужен «классический» остаток от деления, то в Дарте есть remainder: https://api.dart.dev/stable/3.3.2/dart-core/num/remainder.html