演算子 ++ -- の位置と実行のタイミング


演算子 ++-- は変数の前にも後ろにも付けられるが,変数の値を変えるタイミングが異なる。

   $number++;    #後置
   ++$number;    #前置

上のような例では処理結果に差は出ないが,次の例1のように,他の関数の引数として ++ 付きの変数が用いられるような場合には,前置した場合と後置した場合で,処理結果が違ってくる。

例1
% perl -e '$number=1; print $number++, "\n";'
1
% perl -e '$number=1; print ++$number, "\n";'
2

後置の場合は,print $number, "\n" が実行されてから,$number の数値が1つ大きくなるため,出力されるのが 1 になるのに対し,前置の場合には,最初に数値を1つ大きくしてから,print $number, "\n" が実行されるため,出力されるのは 2 になる。

print $number++, "\n";'

 「print $number, "\n"」を実行 ($number は 1)
   ↓ 
  $numberの値を1増加

・print ++$number, "\n";'

  $numberの値を1増加
   ↓ 
 「print $number, "\n"」を実行 ($number は 2)
例2
% perl -e '$number=1; print $number++ + 1, "\n"'
2
% perl -e '$number=1; print ++$number + 1, "\n"'
3

前置と後置の違いがわかりづらければ,++-- は関数の引数等には付けず,位置に因る差が生じないような書き方にするとよい。

% perl -e '$number=1; print $number, "\n"; $number++;'
1
% perl -e '$number=1; print $number, "\n"; ++$number;'
1
% perl -e '$number=1; $number++; print $number, "\n";'
2
% perl -e '$number=1; ++$number; print $number, "\n";'
2
% perl -e '$number=1; print $number + 1, "\n"; $number++;'
2
% perl -e '$number=1; print $number + 1, "\n"; ++$number;'
2
% perl -e '$number=1; $number++; print $number + 1, "\n";'
3
% perl -e '$number=1; ++$number; print $number + 1, "\n";'
3