1、基礎指派運算子 =
將右側運算式的數值存入左側變數,覆蓋變數原本儲存的內容。
使用語法:
變數 = 數值或運算式;
int age;
age = 10; // 將數值10指派給age變數
String name;
name= "sam"; // 字串指派範例Code language: JavaScript (javascript)
2、空值感知指派運算子 ??=
僅當左側變數值為 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運算後指派 |
| 位元互斥或 | ^= | 位元XOR運算後指派 |
| 位元或 | |= | 位元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
// ^= 位元互斥或
int y = 5;
y ^= 3;
print(y);
// |= 位元OR
int z = 4;
z |= 1;
print(z); // 5
}Code language: PHP (php)
補充說明位元移位範例:int bit1 = 1; 向左移動2個位元
十進制數字 1 的32位元二進制表示:
00000000 00000000 00000000 00000001
x << n:將 x 所有二進位元整體向左平移 n 位,右側空出的低位補上 0,左側超出範圍的高位直接捨棄。
平移後的二進制內容如下:
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. 空值感知指派 ??=
int? b; // 預設為null
b ??= 20;
print(b == 20);
b ??= 99; // b已有數值,不會覆蓋
print(b == 20);
// 5. 減法複合指派 -=
a -= 5;
print(a == 5);
// 6. 取餘數 %=
a %= 3;
print(a == 2);
}Code language: Dart (dart)
以上所有判斷輸出皆為 true
Previous: Dart 型別測試運算子
Next: Dart 邏輯運算子