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, и их использование, вы сможете создавать более сложные и эффективные программы, оптимизированные по производительности и масштабируемости.

 

Комментарии

4

Без регистрации и смс

  • Вадим:

    int a = -10;

    int b = 3;

    int result = a % b;

    print(result); // Получим: -1

    А вы сами попробуйте, будете сильно удивлены результату 🙂

    • Сергей:

      А ты можешь объяснить, почему так получилось?)

      Ломаю голову, не могу понять логику.

    • Investrum:

      Всё верно. А сколько по вашему должно получиться?!

      10/3 = 3 целых и 1 остаток. 3 * 3 + 1 = 10.

      -10/3 = -3 целых и -1 остаток. -3 * 3 + (-1) = -10.

    • Investrum:

      А, вы цитировали пример, и по факту другой результат получается. Сразу не понял.

      В общем, разобрался в вопросе. В Дарте есть два разных способа нахождения остатка от деления. Знак % использует т.н. Евклидово деление. В таком случае остаток от деления будет всегда положительным. Подробнее: 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

      int result = a.remainder(b);

      print(result); // Получим: -1