Готовый перевод 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
Настройки
Готово:
