「プリインクリメント」と「ポストインクリメント」の違い
予備知識
| 用語 | 意味 |
|---|---|
| インクリメント | 今の数字に1を足すこと |
| 演算子 | 「どんな演算をしてくださいね」を表現する記号 |
| インクリメント演算子 | プログラミングで出てくる演算子のひとつで「今の数字に1を足しますよ~」を意味する演算子 |
| 変数 | プログラミング言語における「値を入れておく箱」 |
それぞれの用語の意味
| 用語 | 意味 |
|---|---|
| プリインクリメント | 「++num」のような、インクリメント演算子を変数の前に置く書き方の便宜上の呼び名 |
| ポストインクリメント | 「num++」のような、インクリメント演算子を変数の後ろに置く書き方の便宜上の呼び名 |
似ているところ
どちらもインクリメント演算子です。
演算後、変数の値に1加算されています。
違うところ
1加算されるタイミングが違います。
実際に例を挙げて説明しますね。
まずは、PHPで書いた2つの処理を見てください。
<php
$num = 1;
$ret = ++$num;
print $ret
<php
$num = 1;
$ret = $num++;
print $ret
違いは3行目の
$ret = ++$num;
と
$ret = $num++;
だけです。
それぞれの処理の結果はどうなると思いますか?
答えは、上の処理の$retの値は「2」になります。
それに対して、下の処理の$retの値は「1」のままです。
どうしてでしょうね?
実は
$ret = ++$num;
は
$ret = (++$num);
っぽいイメージになります。
$numに1を足して、その結果が$retに入れられるのです。
$num = $num + 1;
$ret = $num;
と同じ結果になります。
それに対して
$ret = $num++;
は
($ret = $num)++;
っぽいイメージです。
$numの値を$retに代入して、その後で$numに1が足されるのです。
$ret = $num;
$num = $num + 1;
と同じ結果になります。
個人的な使い分け
基本的にはポストインクリメント(num++)を使います。
特に理由はありませんが、参考書などの例文を見るとポストインクリメント(num++)を使っていることが多いように感じられるからです。
よっぽどのことがない限りプリインクリメント(++num)は使いません。
というか、ポストインクリメント(num++)とプリインクリメント(++num)で処理結果が変わるような場合は、分けて書きます。
$ret = ++$num;
ではなく
$num++;
$ret = $num;
や
$num = $num + 1;
$ret = $num;
と書くようにしています。
ですから、プリインクリメント(++num)は、ほとんど使ったことがありません。






