インクリメント「++」
「インクリメント」とは、整数型の変数の値を1増加させることを言います。
もくじ
1.具体例
2.「前置インクリメント」と「後置インクリメント」
3.「前置インクリメント」と「後置インクリメント」の違い
具体例
1 2 |
int x = 0; ++x; |
と、書くことができます。
1 |
++x; |
「インクリメント」はこのように書き、このコードだけで変数xの値を+1することができます。
上記のインクリメントの式では、「x に 1 を加算した値を、x に再度代入する」という処理が実行されており、
1 |
x = x + 1; |
と、このように書き換えることができます。
では、改めてコードを見てみましょう。
1 2 |
int x = 0; ++x; |
1行目で、変数x を 0 で初期化しています。
2行目で、変数x のインクリメントが行われているので、最終的に変数xは「1」になっています。
「前置インクリメント」と「後置インクリメント」
インクリメントには、前置インクリメントと後置インクリメントの2つがあります。
1 |
++x; |
このように変数の前に++を置くものを「前置インクリメント」といい、
1 |
x++; |
このように変数の後ろに++を置くものを「後置インクリメント」といいます。
両者とも「変数を+1する」ということに変わりはなく、最終的な変数の値に変わりはありません。
次のコードは、前置インクリメントを利用した場合の例です。
1 2 3 4 5 6 7 8 9 |
int x = 0; int y = 0; ++x; if (x == 1) { y = 10; } |
x と y を0で初期化して、4行目で x をインクリメントで +1 しているため x の値は 1 になります。
x が 1 になっているので、if文の条件を満たしているため、if文の中が実行されて、y の値は 10 になります。
ですので、最終的に x の値は 1 で y の値は 10 になっています。
では、後置インクリメントの場合はどうでしょうか。
1 2 3 4 5 6 7 8 9 |
int x = 0; int y = 0; x++; if (x == 1) { y = 10; } |
この場合も、前置インクリメントの説明同様に、最終的に x の値は 1 で y の値は 10 になっています。
今回のように単純にインクリメントを利用する場合には、両者に違いはありません。
プログラミング初心者の方の場合、
「インクリメントを使用するときは、前置インクリメントを利用する」
と思っておいていただいて結構です。
後置インクリメントを使わなければならない、といった場面はほとんどないかと思います。
以降の説明は、中級者以上の方向けになります。
「前置インクリメント」と「後置インクリメント」の違い
上記コードでは、 x の値を +1 した後、if文で x == 1 の条件判定を行っていますが、
このコードは、まとめて書くことができます。
1 2 3 4 5 6 7 |
int x = 0; int y = 0; if (++x == 1) { y = 10; } |
このように、『x をインクリメントしつつ、 x == 1 の条件判定を行う』ことができます。
前置インクリメントと後置インクリメントで注意をしなければならないのは、このような使い方をする場合だ。
上記コードのように前置インクリメントで書いた場合には、
x の 値を +1 した後に、条件判定の x == 1 が実行されます。
それに対し、後置インクリメントで書いた場合には、
条件判定の x == 1 が実行された後に、x の値が +1 されます。
前置と後置では、インクリメントされるタイミングが異なる
前置では”先に”インクリメントが行われ、後置では”後で”インクリメントが行われます。
ですので、
前置インクリメントで書いた以下のコードと、
1 2 3 4 5 6 7 |
int x = 0; int y = 0; if (++x == 1) { y = 10; } |
後置インクリメントで書いた以下のコード、
1 2 3 4 5 6 7 |
int x = 0; int y = 0; if (x++ == 1) { y = 10; } |
この2つの最終的な結果には違いが出てきます。
前置インクリメントの場合には、x のインクリメントが実行された後、すなわち x の値が 1 になった後で条件判定が行われるため、if文の条件を満たし、最終的な y の値は 10 になっています。
一方、後置インクリメントの場合には、 条件判定が先に行われるため、if文の条件判定を行う時の x の値は 0 のままなので、条件を満たしておらず、if文内は実行されません。よって、最終的な y の値は 0 となっています。
前置でも後置でも、x の値はインクリメントされるので、最終的な x の値はどちらも 1 になっています。
このように、インクリメントをしつつ「条件判定」を行う場合や、「代入」を行う場合には、前置インクリメントと後置インクリメントでは、結果が異なってきますので、十分気を付けてください。