誕生日が++ageではなくage++の理由

セントルイス グーズ ランビック

まず++演算子のおさらい。
++演算子は、変数の前につけて++aとすることも、後ろにつけてa++とすることもできる。このふたつには違いがある。


この違いは、print(++a)やprint(a++)とするとわかる。++aは式としてはaを1増やした値に、a++は式としては増やす前の値になる。
たとえば、このようなプログラムを書いてみる。

int age = 20;
System.out.printf("やあ、ぼくきしだ。%d歳!", ++age);

そうするとこのように表示される。

やあ、ぼくきしだ。21歳!


一方で、このように書いてみる。

int age = 20;
System.out.printf("やあ、ぼくきしだ。%d歳!", age++);

そうすると、今度はこのように表示される。

やあ、ぼくきしだ。20歳!

けれども、この処理のあとageの値はもちろん21になっている。


つまり、++ageと書くとageがひとつ増え、そしてひとつ増えた値が評価されるけれども、age++だとageはひとつ増えるものの、評価される値は増える前のものになる。
みんな、誕生日の日に++ageではなくage++と書くのは、++ageだと増えたageを評価するけど、age++だとageは増えるものの評価される値は増える前のもので増えた値は評価されないから、歳が増えたという現実から目を背けられるためだと思われる。


age++というのは、「みんな!ぼくは誕生日だけど、何歳になったかには触れないでね!」というメッセージなのだ。