Dart 支援下表列出的所有運算子,表格依照優先權由高至低排序
| 分類說明 | 運算子 | 結合性 |
|---|---|---|
| 一元後置運算子 | expr++ expr-- () [] ?[] . ?. ! | 無 |
| 一元前置運算子 | - expr ! expr ~ expr ++ expr -- expr await expr | 無 |
| 乘除運算 | * / % ~/ | 左結合 |
| 加減運算 | + - | 左結合 |
| 移位運算 | << >> >>> | 左結合 |
| 位元與 | & | 左結合 |
| 位元互斥或 | ^ | 左結合 |
| 位元或 | | | 左結合 |
| 關係與型別偵測 | >= > <= < as is is! | 無 |
| 相等判斷 | == != | 無 |
| 邏輯與 | && | 左結合 |
| 邏輯或 | || | 左結合 |
| 空值合併運算子 | ?? | 左結合 |
| 三元條件運算子 | expr1 ? expr2 : expr3 | 右結合 |
| 串聯運算子 | .. ?.. | 左結合 |
| 賦值運算子 | = *= /= += -= &= ^= 等 | 右結合 |
| 展開運算子(備註說明) | ... ...? | 無 |
透過以上運算子搭配運算元,就能組成運算式
舉例:
a++
a + b
a = b
a == b
c ? a : b
a is T
以下是完整實作範例
void main() {
// 1. 後置遞增運算式 a++
int a = 10;
print("1. 後置遞增 a++");
print("遞增前 a = $a");
int temp = a++; // 先取值,後遞增
print("temp(取出的原值)= $temp");
print("遞增後 a = $a\n");
// 2. 加法運算式 a + b
int b = 20;
int sum = a + b;
print("2. 加法 a + b");
print("$a + $b = $sum\n");
// 3. 賦值運算式 a = b
a = b;
print("3. 賦值 a = b");
print("賦值後 a = $a\n");
// 4. 相等判斷運算式 a == b
bool isEqual = a == b;
print("4. 相等判斷 a == b");
print("a == b 的結果:$isEqual\n");
// 5. 三元條件運算式 c ? a : b
int c = 5;
String result = c > 0 ? "c 是正數" : "c 是負數或零";
print("5. 三元運算式 c ? a : b");
print("判斷 c>0:$result\n");
// 6. 型別偵測運算式 a is T
dynamic testVal = 100;
print("6. 型別偵測 a is T");
print("testVal is int:${testVal is int}");
print("testVal is String:${testVal is String}");
}
Code language: Dart (dart)
你可以複製上方程式碼,執行 dart run 觀察輸出結果
運算子優先權核心規則
1. 優先權排序邏輯
運算子表格由上到下優先權逐層遞減:表格上方列的運算子優先權高於下方所有列,會優先執行。
補充:下方的「>」代表優先順序先執行,不是大小比較運算子。
執行順序範例:取模 % > 相等判斷 == > 邏輯與 &&
拆解運算式執行流程(n % i == 0 && d % i == 0):
- 先執行
n % i、d % i(%優先權最高) - 接著執行兩個
==相等比較 - 最後執行中間的
&&邏輯與

2 括號的作用
加上括號 ((n % i == 0) && (d % i == 0)):僅提升程式可讀性,不會改變原本的運算順序;
不帶括號寫法 n % i == 0 && d % i == 0:依靠原生優先權自動運算,兩段程式邏輯、執行結果完全相同;
補充:只有需要打破預設優先權時,括號才會改變執行順序。
void main() {
int n = 10;
int d = 20;
int i = 2;
// 寫法1:加上括號,可讀性更高
if ((n % i == 0) && (d % i == 0)) {
print("寫法1:可整除");
}
// 寫法2:不帶括號,依優先權自動運算,效果完全一致
if (n % i == 0 && d % i == 0) {
print("寫法2:可整除");
}
}Code language: PHP (php)
執行輸出結果
寫法1:可整除
寫法2:可整除