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= b は a = a op b と同じ意味です
| 区分 | 演算子 | 意味 |
|---|---|---|
| 四則演算基本 | += | 加算後代入 |
-= | 減算後代入 | |
*= | 乗算後代入 | |
/= | 浮動小数点数で除算後代入 | |
| 整数除算 | ~/= | 整数除算後代入(商を取得) |
| 剰余 | %= | 剰余計算後代入 |
| 左シフト | <<= | 左シフト後代入 |
| 右シフト | >>= | 右シフト後代入 |
| 符号なし右シフト | >>>= | 符号なし右シフト後代入 |
| ビットAND | &= | ビットAND後代入 |
| ビットXOR | ^= | ビットXOR後代入 |
| ビットOR | |= | ビットOR後代入 |
| 演算子による計算: | a op= b | a = a op b |
| サンプル: | a += b | a = 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となります
Previous: Dart 型判定演算子
Next: Dart 論理演算子