用於兩個數值之間的運算,總共七種,包含基礎四則運算、整數除法、取餘、一元負號運算子
| 運算子 | 功能說明 |
|---|---|
+ | 加法 |
- | 減法 |
-運算式 | 一元負號(取反,翻轉數值正負) |
* | 乘法 |
/ | 一般除法,運算結果永遠是 double 浮點數型別 |
~/ | 整數除法,捨去小數部分,回傳 int 整數型別 |
% | 取模(取得整數除法的餘數) |
其中除法的特性比較特殊,相較其他程式語言,使用 / 運算後一定會得到浮點數;如果需要整數結果,必須使用 ~/。具備開發基礎的讀者要特別留意這點。
範例程式
void main() {
// 驗證基礎四則、整數除法、取模結果
print(2 + 3 == 5);
print(2 - 3 == -1);
print(2 * 3 == 6);
print(5 / 2 == 2.5); // 一般除法輸出小數 double
print(5 ~/ 2 == 2); // 整數除法僅保留整數部分 int
print(5 % 2 == 1); // 取得除法餘數,% 取模運算子只會抓整數除法的餘數
// 結合整數除法與餘數的字串拼接範例
print('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
}Code language: Dart (dart)
執行輸出結果

遞增 / 遞減運算子
Dart 支援前置與後置兩種遞增 ++、遞減 --,核心差異:變數是先修改、還是先取值
| 運算子 | 執行邏輯 | 運算式最後回傳值 |
|---|---|---|
++var | 先將變數 + 1,再參與運算 | 遞增後的新數值 |
var++ | 先拿變數原始值參與運算,運算結束後再將變數 + 1 | 遞增前的原始數值 |
--var | 先將變數 – 1,再參與運算 | 遞減後的新數值 |
var-- | 先拿變數原始值參與運算,運算結束後再將變數 – 1 | 遞減前的原始數值 |
void main() {
int a;
int b;
// 1. 前置遞增 ++a:先遞增,再賦值
a = 0;
b = ++a;
print(a == b); // a=1,b=1,1 == 1
// 2. 後置遞增 a++:先賦值,再遞增
a = 0;
b = a++;
print(a != b); // a=1,b=0,1 != 0
// 3. 前置遞減 --a:先遞減,再賦值
a = 0;
b = --a;
print(a == b); // a=-1,b=-1,-1 == -1
// 4. 後置遞減 a--:先賦值,再遞減
a = 0;
b = a--;
print(a != b); // a=-1,b=0,-1 != 0
}
Code language: PHP (php)
上面所有範例執行後都會輸出 true
需要注意:++ 或 — 放在前置、後置,在部分語境下執行效果完全不同。
如果單獨使用,舉例如下:
int a = 1;
++a;
int b = 1;
b++;
print(a);
print(b);Code language: PHP (php)
這樣撰寫,最後兩者輸出都會是 2
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
2
2
Code language: CSS (css)
同理 — 也是相同邏輯,最終變數一定會加一或是減一
但如果把 ++、– 嵌入運算式當中,差異就會出現,例如:
void main() {
int a = 5;
// 後置:先取用 5 進行計算,計算完 a 才變成 6
int res1 = a++ * 2;
print(res1); // 10
print(a); // 6
int b= 5;
// 前置:先把 b 變成 6,再用 6 做運算
int res2 = ++b * 2;
print(res2); // 12
print(b); // 6
}Code language: PHP (php)
範例中的 a、b 最後都增加了 1,但 res1 與 res2 的運算結果卻不一樣。只差 ++ 擺在前或後,結果就會不同。
後置寫法 a++ 的執行邏輯:先使用 a 當前數值進行後續運算,也就是先執行 a*2 = 10,此時 a 仍為 5,將結果賦值給 res1,所以 res1 等於 10;運算完畢後 a 才加一變成 6。
而前置寫法會先將 a 加一變成 6,接著執行 6*2 = 12,最後把 12 存入 res2。
int res1 = a++ * 2; 拆解後等同兩行程式:
int res1 = a * 2;
a = a +1;
int res2 = ++b * 2; 拆解後等同兩行程式:
b = b+1;
int res2 = b * 2;

方便記憶的口訣:
前置先改值,後置先取用;
前置回傳新值,後置回傳原始值。
重點總結
前置 ++a / --a:先修改變數本身,再拿修改後的數值參與運算、賦值
後置 a++ / a--:先取用變數原始數值參與運算、賦值,運算結束後才修改變數
讀者可以自行測試以下範例:
void main() {
int a = 0;
int b = ++a;
// 步驟1:a = a + 1 → a 變成 1
// 步驟2:將修改後的 a(1)賦值給 b
print(a); // 1
print(b); // 1
}Code language: PHP (php)
void main() {
int a = 0;
int b = a++;
// 步驟1:先把 a 原始值 0 賦值給 b
// 步驟2:執行 a = a + 1 → a 變成 1
print(a); // 1
print(b); // 0
}Code language: PHP (php)
void main() {
int a = 0;
int b = --a;
// 步驟1:a = a - 1 → a 變成 -1
// 步驟2:將修改後的 a(-1)賦值給 b
print(a); // -1
print(b); // -1
}Code language: PHP (php)
void main() {
int a = 0;
int b = a--;
// 步驟1:先把 a 原始值 0 賦值給 b
// 步驟2:執行 a = a - 1 → a 變成 -1
print(a); // -1
print(b); // 0
}Code language: PHP (php)
以上是 ++、– 前置與後置最基礎的示範,讀者可以自行編譯執行,觀察兩者的差異。