Готовый перевод Dart: Up and Running / Dart: Up and Running: Обзор языка. Операторы

## Арифметические операторы

Dart поддерживает стандартные арифметические операторы:

-- Таблица --

Пример:

assert(2 + 3 == 5);
assert(2 - 3 == -1);
assert(2 * 3 == 6);
assert(5 / 2 == 2.5); // Результат - дробное число
assert(5 ~/ 2 == 2); // Результат - целое от деления
assert(5 % 2 == 1); // Результат - остаток от деления

print('5/2 = ${5~/2} и остаток ${5%2}'); // 5/2 = 2 и остаток 1

Dart также поддерживает префиксные и постфиксные инкременты и декременты:

-- Таблица --

Пример

a = 0;
b = ++a; // Инкрементируем а перед тем, как b получит значение.
assert(a == b); // 1 == 1

a = 0;
b = a++; // Инкрементируем a после того, как b получит значение
assert(a != b); // 1 != 0

a = 0;
b = --a; // Декрементируем а перед тем, как b получит значение.
assert(a == b); // -1 == -1

a = 0;
b = a--; // Декрементируем a после того, как b получит значение
assert(a != b) ; // -1 != 0

## Операторы отношений

Для проверки того, что объект **x** и объект **y** представляют одно и то же, используйте оператор **==**. В том случае, если вам нужно узнать, ссылаются ли два объекта на один и тот же объект, то используйте функцию **identical()**. Вот как работает оператор **==**:

* Если **х** или **y** **null**, тогда возвращается **true**, если оба **null**, и **false**, если **null** только один из них.
* Возвращается результат метода **x.==(y)**. Верно, операторы, такие как **==**, являются методами, которые вызываются на первом операнде. Вы можете переопределить многие операторы. Для более подробной информации посмотрите статью [Переопределение операторов]().

Вот пример использования операторов сравнения:

## Операторы проверки типа

Результатом проверки **obj is T** будет **true** в том случае, если **obj** реализует интерфейс, определенный в **T**. Например, **obj is Object** всегда **true**.

Используйте оператор **as** для приведения объекта к определенному типу. Но вообще, вы должны использовать этот оператор для краткого обозначения проверки типа объекта. Например, посмотрим следующий код:

if (person is Person) { // Проверка типа
person.firstName = 'Bob';
}

Вот так этот код можно сделать короче с помощью оператора **as**:

> **Примечание**
>
> Эти два экземпляра кода не эквивалентны. Если **person** не *null* или не объект класса *Person*, то в первом примере ничего не произойдет, а во втором будет брошено исключение.

## Операторы присвоения

Вы уже видели, как можно переменной присвоить значение с помощью оператора **=**. Также можно использовать составные операторы присвоения, такие как **+=**, которые состоят из какого-то оператора и оператора присвоения.

Вот как работают составные операторы присвоения:

Пример ниже использует оба типа присвоения:

var a = 2; // Присвоение через =
a *= 3; // Умножение и присвоение значения: a = a * 3
assert(a == 6);

## Логические операторы

Вы можете инвертировать или комбинировать логические выражения с помощью логических операторов.

Пример использования логических операторов:

if (!done && (col == 0 || col == 3)) {
// ...Какие-то действия...
}

## Сдвиговые и побитовые операторы

В Dart вы можете манипулировать битами чисел. Как правило, побитовые операторы и операторы сдвига используются с целыми числами, как показано в таблице ниже и статье "Bitwise and shift operators".

Пример использования:

assert((value & bitmask) == 0x02); // AND
assert((value & ~bitmask) == 0x20); // AND NOT
assert((value | bitmask) == 0x2f); // OR
assert((value ^ bitmask) == 0x2d); // XOR
assert((value << 4) == 0x220); // Сдвиг влево
assert((value >> 4) == 0x02); // Сдвиг вправо

## Другие операторы

Осталось несколько операторов, многие из которых вы видели в других примерах.

Переведено на Нотабеноиде
http://notabenoid.org/book/53003/227976

Переводчики: cartrege

Настройки

Готово:

77.08% КП = 1.0

Непереведённые фрагменты будут пропущены.