ループの中で頻繁に登場する ++ と -- を掘り下げます。特に前置と後置の違いは初心者がつまずきやすいポイントです。実証コードで動作を確認します。
++ と -- が何の短縮形かを説明できるcount++)と前置(++count)の式の値の違いを説明できる+= などの複合代入演算子を使えるインクリメントは変数の値を 1 増やす、デクリメントは 1 減らす演算です。
書式:後置インクリメント・後置デクリメント
1
2
変数名++ // 1 増やす
変数名-- // 1 減らす
count++ は count = count + 1 の短縮形です。
1
2
3
4
5
6
int count = 0;
count++;
Console.WriteLine(count); // 1
count--;
Console.WriteLine(count); // 0
ループのカウンター更新でよく見かける書き方です。
1
2
3
4
for (int i = 0; i < 3; i++) // i++ は i = i + 1 と同じ
{
Console.WriteLine(i);
}
++ と -- は変数の前に書くこともできます。
書式:前置インクリメント・前置デクリメント
1
2
++変数名 // 1 増やす
--変数名 // 1 減らす
1
2
3
int count = 0;
++count;
Console.WriteLine(count); // 1
「変数が 1 増える」という結果だけ見れば後置と変わりません。では何が違うのでしょうか。
count++(後置)と ++count(前置)はどちらも変数を 1 増やしますが、式として使ったときの値が異なります。
| 式の値 | 変数への影響 | |
|---|---|---|
count++(後置) |
加算前の値 | 1 増える |
++count(前置) |
加算後の値 | 1 増える |
「変数が 1 増える」という結果は同じです。違いは「その式自体がどの値として評価されるか」です。
1
2
3
4
5
// 後置: result には加算前の値が入る
int a = 10;
int result = a++; // 式の値は加算前の 10
Console.WriteLine(result); // 10
Console.WriteLine(a); // 11(a 自体はちゃんと増えている)
1
2
3
4
5
// 前置: result には加算後の値が入る
int b = 10;
int result = ++b; // 式の値は加算後の 11
Console.WriteLine(result); // 11
Console.WriteLine(b); // 11
1
2
3
int x = 5;
Console.WriteLine(x++); // 5 (出力後に x が 6 になる)
Console.WriteLine(x); // 6
1
2
3
int y = 5;
Console.WriteLine(++y); // 6 (先に y が 6 になってから出力)
Console.WriteLine(y); // 6
後置 x++ を評価するとき、C# は次の順序で処理します。
x の値(5)を式の結果として返すx に 1 を加える(x が 6 になる)前置 ++y を評価するとき:
y に 1 を加える(y が 6 になる)y の値(6)を式の結果として返すcount++ または ++count を単独の文として使う場合(式の値を誰も使わない場合)は、どちらも結果は変わりません。
1
2
3
int count = 0;
count++; // これと
++count; // これは結果が同じ(count が 1 増える)
ループの更新式 for (int i = 0; i < n; i++) はこのケースなので、i++ でも ++i でも動作は変わりません。
複合代入演算子 — ++ と -- は 1 だけ増減しますが、任意の量を加減したいときは複合代入演算子を使います。
| 演算子 | 意味 | 例 | 結果(x = 10 のとき) |
|---|---|---|---|
+= |
加算して代入 | x += 3 |
x が 13 |
-= |
減算して代入 | x -= 3 |
x が 7 |
*= |
乗算して代入 | x *= 3 |
x が 30 |
/= |
除算して代入 | x /= 3 |
x が 3 |
%= |
剰余して代入 | x %= 3 |
x が 1 |
1
2
3
4
5
6
int hp = 100;
hp -= 30; // hp = hp - 30 と同じ
Console.WriteLine(hp); // 70
hp += 10; // 回復
Console.WriteLine(hp); // 80
1
2
3
4
5
6
7
8
9
int count = 0;
// ❌ 意図しない動作: result に 0(加算前)が入る
int result = count++;
Console.WriteLine(result); // 0(1 を期待していた場合はバグ)
// ✅ 加算後の値を使いたいなら前置
int result2 = ++count;
Console.WriteLine(result2); // 2(count は現在 1 なので ++count で 2)
count++ は count = count + 1 の短縮形(デクリメントは count--)count++) — 式の値は加算前。変数は後から増える++count) — 式の値は加算後。変数が先に増える+= -= *= /= %= で任意の量を加減算できる次のコードの出力結果を答えてください。
1
2
3
4
int a = 3;
int b = a++;
Console.WriteLine(a);
Console.WriteLine(b);
次のコードの出力結果を答えてください。
1
2
3
4
int x = 3;
int y = ++x;
Console.WriteLine(x);
Console.WriteLine(y);
hp = 100 のとき、hp -= 25 を 3 回実行した後の hp の値はいくつですか?
a は 4、b は 3。後置なので b には加算前の 3 が代入され、その後 a が 4 になる。
x は 4、y は 4。前置なので先に x が 4 になり、その値が y に代入される。
25。100 - 25 - 25 - 25 = 25。
メソッド では、処理をまとめて名前をつけて再利用する方法を学びます。