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

1. Базовый оператор присваивания =

Сохраняет значение выражения справа в переменную слева, перезаписывая старое значение.

Синтаксис:

переменная = значение или выражение;
int age;
age = 10;        // Присвоить переменной age число 10
String name;
name= "sam"; // Присвоение строкиCode language: JavaScript (javascript)

2. Оператор присваивания с проверкой на null ??=

Присвоение выполняется только тогда, когда значение левой переменной равно null. Если переменная не null — исходное значение сохраняется.

Синтаксис:

переменная ??= значение;

Эквивалентно коду:

if (переменная == null) {
  переменная = значение;
}Code language: JavaScript (javascript)

Пример:

void main() {
	int? total = null;
	total ??= 5;
	print(total); // Выведет 5, присваивание работает, так как total = null

	int? count = 100;
	count ??= 200;
	print(count); // Выведет 100, переменная не null, изменений нет
}Code language: PHP (php)

3. Составные операторы присваивания

Выполняют математическую операцию и присваивание за одно действие

Для любого оператора op

a op= b равносильно записи a = a op b

КатегорияОператорЗначение
Базовая арифметика+=Сложить и присвоить
-=Вычесть и присвоить
*=Умножить и присвоить
/=Деление с плавающей точкой и присвоить
Целочисленное деление~/=Целочисленное деление и присвоить
Остаток от деления%=Вычислить модуль и присвоить
Битовый сдвиг влево<<=Сдвинуть биты влево и присвоить
Битовый сдвиг вправо>>=Сдвинуть биты вправо и присвоить
Беззнаковый сдвиг вправо>>>=Беззнаковый сдвиг вправо и присвоить
Побитовое И&=Побитовое И и присвоить
Побитовое XOR^=Побитовое XOR и присвоить
Побитовое ИЛИ|=Побитовое ИЛИ и присвоить
Общий принцип работы:op= ba = a op b
Пример:a += ba = a + b

Код примера:

void main() {
	var num = 2;

	// *= Составное присваивание умножения
	num *= 3; 
	print(num); // 6, эквивалентно num = num * 3

	// += Сложение
	num += 4;
	print(num); // 10, эквивалентно num = num + 4

	// -= Вычитание
	num -= 2;
	print(num); // 8

	// /= Деление с плавающей точкой
	double d = 10;
	d /= 2;
	print(d); // 5.0

	// ~/= Целочисленное деление
	int n = 7;
	n ~/= 2;
	print(n); // 3

	// %= Модуль
	int m = 9;
	m %= 2;
	print(m); // 1

	// <<= Сдвиг влево
	int bit1 = 1;
	bit1 <<= 2; // 1 << 2 = 4
	print(bit1); // 4

	// >>= Сдвиг вправо
	int bit2 = 8;
	bit2 >>= 2; // 8 >> 2 = 2
	print(bit2); // 2

	// >>>= Беззнаковый сдвиг вправо
	int bit3 = -8;
	bit3 >>>= 2;
	print(bit3); //4611686018427387902, очень большое число 

	// &= Побитовое И
	int x = 6; // 110
	x &= 3;    // 011
	print(x);  // 010 = 2

	// ^= Побитовое XOR
	int y = 5;
	y ^= 3;
	print(y);

	// |= Побитовое ИЛИ
	int z = 4;
	z |= 1;
	print(z); // 5
}Code language: PHP (php)

Про битовые сдвиги: переменная int bit1 = 1; сдвигаем биты на 2 позиции влево,

32-битное двоичное представление десятичного числа 1:

00000000 00000000 00000000 00000001

x << n: Сдвигаем все двоичные биты числа x на n позиций влево, пустые младшие разряды справа заполняем нулями, а биты, вышедшие за пределы слева — отбрасываем.

В нашем примере получается такая последовательность:

00000000 00000000 00000000 00000100

Это двоичное значение соответствует десятичному числу 4

Логические операторы мы разберем позже. Сейчас достаточно освоить операторы присваивания — это основная тема данного урока.

void main() {
  // 1. Базовое присваивание =
  var a = 2;
  print(a == 2);

  // 2. Составное умножение *=
  a *= 3; // a =  a * 3;
  print(a == 6);

  // 3. Составное сложение +=
  a += 4; // a = a + 4;
  print(a == 10);

  // 4. Присваивание с проверкой на null ??=
  int? b; // По умолчанию null
  b ??= 20;
  print(b == 20);

  b ??= 99; // b не равен null, изменений нет
  print(b == 20);

  // 5. Вычитание -=
  a -= 5;
  print(a == 5);

  // 6. Модуль %=
  a %= 3;
  print(a == 2);
}Code language: Dart (dart)

Все выводимые значения равны true

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *