基本二項算術演算子
二つの数値同士の計算に使用し、全7種類あります。四則演算、整数除算、剰余、単項マイナス演算子を含みます
| 演算子 | 役割説明 |
|---|---|
+ | 足し算 |
- | 引き算 |
-式 | 単項マイナス(符号反転、数値の正負を逆にする) |
* | 掛け算 |
/ | 普通の除算、結果は常に 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は前置と後置の2種類のインクリメント ++、デクリメント -- に対応しています。核心的な違い:変数を先に更新するか、値を先に取得するか
| 演算子 | 実行ロジック | 式が最終的に返す値 |
|---|---|---|
++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)
同様に — も同じ動作で、最終的に変数は+1または-1されます。
しかし、++ — を式の中で使用する場合、例:
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の最終値は同じ6ですが、res1とres2の結果は異なります。++の位置が前か後かだけの僅かな差です。
後置a++の仕組み:まずaの値5でa*2=10を実行、この時点のaは5のままres1に代入、その後aに+1して6になる。
前置++bの仕組み:先にbに+1して6にし、その後6*2=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
}
void main() {
int a = 0;
int b = a++;
// 手順1:元のaの値0をbに代入
// 手順2:a = a + 1 → aが1になる
print(a); // 1
print(b); // 0
}
void main() {
int a = 0;
int b = --a;
// 手順1:a = a - 1 → aが-1になる
// 手順2:更新後のa(-1)をbに代入
print(a); // -1
print(b); // -1
}
void main() {
int a = 0;
int b = a--;
// 手順1:元のaの値0をbに代入
// 手順2:a = a - 1 → aが-1になる
print(a); // -1
print(b); // 0
}
以上が++ — の前置・後置の最も簡単な例です。自身でコンパイル・実行し、動作の違いを体感してください。