演習 - 値のインクリメントとデクリメント

完了

このモジュールで学習する最後の基本演算は、記号の組み合わせである特殊な演算子を使用し、値をインクリメントおよびデクリメントする方法です。

インクリメントとデクリメント

多くの場合、特にループ ロジックを記述していたりデータ構造と相互作用するコードを記述していたりする場合は、値のインクリメントやデクリメントが必要になります。

+= 演算子は、演算子の右側にある値を加算し、演算子の左側の値に代入します。 したがって、次のコード スニペットの 2 行目と 3 行目は同じです。

int value = 0;     // value is now 0.
value = value + 5; // value is now 5.
value += 5;        // value is now 10.

++ 演算子により、変数の値が 1 だけインクリメントされます。 したがって、次のコード スニペットの 2 行目と 3 行目は同じです。

int value = 0;     // value is now 0.
value = value + 1; // value is now 1.
value++;           // value is now 2.

これと同じ手法を、減算、乗算などに使用できます。 次の演習ステップでは、その一部に焦点を当てます。

Note

+=-=*=++-- といった演算子は、変数に結果を代入するだけでなく、一部の操作を複合的に行うため、複合代入演算子と呼ばれています。 += は特に、加算代入演算子と呼ばれています。

値をインクリメントおよびデクリメントするコードを記述する

  1. .NET エディターですべてのコードを選択し、Delete または Backspace キーを押して削除します。

  2. .NET エディターで、次のコードを入力します。

    int value = 1;
    
    value = value + 1;
    Console.WriteLine("First increment: " + value);
    
    value += 1;
    Console.WriteLine("Second increment: " + value);
    
    value++;
    Console.WriteLine("Third increment: " + value);
    
    value = value - 1;
    Console.WriteLine("First decrement: " + value);
    
    value -= 1;
    Console.WriteLine("Second decrement: " + value);
    
    value--;
    Console.WriteLine("Third decrement: " + value);
    
  3. コードを実行します。 次の出力が表示されます。

    First increment: 2
    Second increment: 3
    Third increment: 4
    First decrement: 3
    Second decrement: 2
    Third decrement: 1
    

Note

"second increment" では、value += 1; を使用しました。 ただし、その量をインクリメントするには、リテラル int 値 (または変数) を使用することもできました。 "2 回目のデクリメント": value -= 1; についても同じことが当てはまります。

インクリメントおよびデクリメント演算子の位置を決める

インクリメント演算子にもデクリメント演算子にも興味深い性質があります。すなわち、その位置に基づき、値を取得する前か後に演算を実行します。 つまり、++value のように値の前で演算子を使用した場合、値が取得される前にインクリメントが行われます。 同様に、value++ の場合、値が取得されてから値がインクリメントされます。

値の前後にインクリメント演算子を使用する

  1. 前の手順からのコードを削除し、次のコードを .NET エディターに入力します。

    int value = 1;
    value++;
    Console.WriteLine("First: " + value);
    Console.WriteLine($"Second: {value++}");
    Console.WriteLine("Third: " + value);
    Console.WriteLine("Fourth: " + (++value));
    
  2. コードを実行します。 次の出力が表示されます。

    First: 2
    Second: 2
    Third: 3
    Fourth: 4
    

次のコード行に注目してください。

Console.WriteLine($"Second: {value++}");

この行は次の 2 段階になります。

  1. 変数 value の現行値を取得し、文字列補間演算でそれを使用します。
  2. 値をインクリメントします。

次のコード行では、値が実際にインクリメントされたことが確認されます。

Console.WriteLine("Third: " + value);

最後のコード行と比べてください。

Console.WriteLine("Fourth: " + (++value));

ここでは、++ 演算子がオペランド value の前に置かれているため、演算の順序が入れ替わります。

  1. 値をインクリメントします。
  2. 変数 value のインクリメント後の新しい値を取得し、文字列操作でそれを使います。

必ずしも必要ではありませんが、式 (++value) をかっこで囲み、読みやすくしています。 隣り合っている + 演算子が多すぎると、他の開発者は間違った意味に取る可能性があります。 このような文体上の決定は主観的なものです。 しかし、一度書いたコードを何度も読むことになるので、読みやすさを重視してください。

まとめ

C# の数学演算についてこれまでに学習した内容を次に示します。

  • +=-=*=++-- のような複合代入演算子を使用し、インクリメントやデクリメントのような算術演算を実行し、結果を元の変数に代入します。
  • インクリメント演算子とデクリメント演算子によって行われる演算は、演算子がオペランドの前にあるか、後にあるかによって異なります。