Unity & C# 学習教材

インクリメント・デクリメント(補足)

ループの中で頻繁に登場する ++-- を掘り下げます。特に前置と後置の違いは初心者がつまずきやすいポイントです。実証コードで動作を確認します。

学習目標

前提知識


1. インクリメント・デクリメントの基本

インクリメントは変数の値を 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);
}

2. 前置インクリメント・前置デクリメント

++-- は変数のに書くこともできます。

書式:前置インクリメント・前置デクリメント

1
2
++変数名   // 1 増やす
--変数名   // 1 減らす
1
2
3
int count = 0;
++count;
Console.WriteLine(count);  // 1

「変数が 1 増える」という結果だけ見れば後置と変わりません。では何が違うのでしょうか。


3. 後置と前置の違い

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

実証:Console.WriteLine に直接渡して確認する

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# は次の順序で処理します。

  1. 現在の x の値(5)を式の結果として返す
  2. x に 1 を加える(x6 になる)

前置 ++y を評価するとき:

  1. y に 1 を加える(y6 になる)
  2. 加算後の 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 x13
-= 減算して代入 x -= 3 x7
*= 乗算して代入 x *= 3 x30
/= 除算して代入 x /= 3 x3
%= 剰余して代入 x %= 3 x1
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)

まとめ


理解度チェック

  1. 次のコードの出力結果を答えてください。

    1
    2
    3
    4
    
    int a = 3;
    int b = a++;
    Console.WriteLine(a);
    Console.WriteLine(b);
    
  2. 次のコードの出力結果を答えてください。

    1
    2
    3
    4
    
    int x = 3;
    int y = ++x;
    Console.WriteLine(x);
    Console.WriteLine(y);
    
  3. hp = 100 のとき、hp -= 25 を 3 回実行した後の hp の値はいくつですか?

解答を見る
  1. a4b3。後置なので b には加算前の 3 が代入され、その後 a4 になる。

  2. x4y4。前置なので先に x4 になり、その値が y に代入される。

  3. 25100 - 25 - 25 - 25 = 25


次のステップ

メソッド では、処理をまとめて名前をつけて再利用する方法を学びます。