インクリメント・デクリメント演算子とは
C#で数値変数を扱う際、「変数の値を1だけ増やす」または「1だけ減らす」という操作は、forループのカウンターや状態管理などで頻繁に発生します。
この操作は count = count + 1; や count += 1; とも記述できますが、C#にはこの処理をさらに簡潔に記述するための「インクリメント演算子 ++」と「デクリメント演算子 --」が用意されています。
これらの演算子には、変数の前に置く「前置 (Prefix)」と、変数の後に置く「後置 (Postfix)」の2つの形式があります。演算子を単独で使用する場合はどちらも同じ結果になりますが、「式」の中で使用する場合、その動作は大きく異なります。
++ (インクリメント演算子)
インクリメント演算子(++)は、変数の値を1増やします。
int counter = 5;
counter++; // counter の値が 6 になる
++ の前置と後置の違い
違いが現れるのは、この演算を変数への代入やメソッドの引数など、別の操作と同時に行う場合です。
1. 前置インクリメント (++variable)
「先に値を1増やし、その変更後の値を式の結果として返す」
using System;
public class PrefixIncrementExample
{
public static void Main()
{
int currentLevel = 10;
// 1. currentLevel が先に 11 にインクリメントされる
// 2. その結果 (11) が newLevel に代入される
int newLevel = ++currentLevel;
Console.WriteLine($"currentLevel: {currentLevel}"); // 結果: 11
Console.WriteLine($"newLevel: {newLevel}"); // 結果: 11
}
}
前置の場合、currentLevelとnewLevelはどちらも同じ「インクリメント後の値」になります。
2. 後置インクリメント (variable++)
「先に変更前の値を式の結果として返し、その後で変数の値を1増やす」
using System;
public class PostfixIncrementExample
{
public static void Main()
{
int currentLevel = 10;
// 1. currentLevel の「変更前の値」(10) が newLevel に代入される
// 2. その後、currentLevel が 11 にインクリメントされる
int newLevel = currentLevel++;
Console.WriteLine($"currentLevel: {currentLevel}"); // 結果: 11
Console.WriteLine($"newLevel: {newLevel}"); // 結果: 10 (変更前の値)
}
}
後置の場合、newLevelには「インクリメントされる前の値」が代入され、currentLevelのみが変更されます。
-- (デクリメント演算子)
デクリメント演算子(--)は、変数の値を1減らします。前置・後置のルールはインクリメント(++)と全く同じです。
int stock = 100;
stock--; // stock の値が 99 になる
-- の前置と後置のコード例
1. 前置デクリメント (--variable)
「先に値を1減らし、その変更後の値を返す」
using System;
public class PrefixDecrementExample
{
public static void Main()
{
int itemsRemaining = 5;
// 1. itemsRemaining が先に 4 にデクリメントされる
// 2. その結果 (4) が currentStock に代入される
int currentStock = --itemsRemaining;
Console.WriteLine($"itemsRemaining: {itemsRemaining}"); // 結果: 4
Console.WriteLine($"currentStock: {currentStock}"); // 結果: 4
}
}
2. 後置デクリメント (variable--)
「先に変更前の値を返し、その後で変数の値を1減らす」
using System;
public class PostfixDecrementExample
{
public static void Main()
{
int itemsRemaining = 5;
// 1. itemsRemaining の「変更前の値」(5) が currentStock に代入される
// 2. その後、itemsRemaining が 4 にデクリメントされる
int currentStock = itemsRemaining--;
Console.WriteLine($"itemsRemaining: {itemsRemaining}"); // 結果: 4
Console.WriteLine($"currentStock: {currentStock}"); // 結果: 5 (変更前の値)
}
}
まとめ
インクリメント(++)およびデクリメント(--)演算子は、C#のコードを簡潔に記述するために非常に便利です。
- 前置 (
++v,--v): 「先に」変数の値を変更し、「変更後」の値を返します。 - 後置 (
v++,v--): 「先に」変更前の値を返し、「その後で」変数の値を変更します。
この違いは、特にforループの変化式(i++)で頻繁に目にしますが、変数の代入時や式の評価時に意図しない動作を引き起こさないよう、両者の動作を正確に理解しておくことが重要です。可読性が下がると思われる場合は、無理に1行にまとめず、variable += 1;のように明示的に記述することも良い選択肢です。
