Dart 代入演算子

1、基本代入演算子 =

右辺の式の値を左辺の変数に保存し、元の値を上書きします。

使い方:

変数 = 値または式;
int age;
age = 10;        // 10をageに代入
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が出力、countがnullではないため代入無効
}Code language: PHP (php)

3、複合代入演算子

演算と代入を一括で行う演算子

任意の演算子 op に対して

a op= ba = a op b と同じ意味です

区分演算子意味
四則演算基本+=加算後代入
-=減算後代入
*=乗算後代入
/=浮動小数点数で除算後代入
整数除算~/=整数除算後代入(商を取得)
剰余%=剰余計算後代入
左シフト<<=左シフト後代入
右シフト>>=右シフト後代入
符号なし右シフト>>>=符号なし右シフト後代入
ビットAND&=ビットAND後代入
ビットXOR^=ビットXOR後代入
ビットOR|=ビットOR後代入
演算子による計算: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 非常に大きな数 

	// &= ビットAND
	int x = 6; // 110
	x &= 3;    // 011
	print(x);  // 010 = 2

	// ^= XOR
	int y = 5;
	y ^= 3;
	print(y);

	// |= ビットOR
	int z = 4;
	z |= 1;
	print(z); // 5
}Code language: PHP (php)

シフト演算について:int bit1 = 1; を2ビット左シフトする場合、

10進数 1 の32ビット2進表記:

00000000 00000000 00000000 00000001

x << n:xの全ての2進ビットをまとめて左にnビット移動し、右側に空いた下位ビットには 0 を補填、左側から溢れた上位ビットは破棄されます。

上記の例では以下のように変化します:

00000000 00000000 00000000 00000100

この2進数は10進数の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となります

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です