インクリメント演算子とデクリメント演算子

変数の値を 1 だけ増加させる、または 1 だけ減少させるという演算は、繰り返し処理や配列などの操作で利用されるため使われる機会が多いです。そのため 1 だけ増加させたり 1 だけ減少させる処理を簡単に記述できるようにインクリメント演算子とデクリメント演算子が用意されています。ここでは Perl におけるインクリメント演算子とデクリメント演算子の使い方について解説します。

(Last modified: )

インクリメント演算子とデクリメント演算子の使い方

1 だけ増加したり 1 だけ減少させる演算を行うため専用の演算子が用意されています。 1 だけ増加させる演算子をインクリメント演算子と言い ++ を使います。また 1 だけ減少させる演算子をデクリメント演算子と言い -- を使います。

変数++;
変数--;

変数のあとに ++ または -- を記述することで、演算子の前に書かれた変数に格納されている値を 1 だけ増加させたり 1 だけ減少させたりすることができます。次の例を見てください。

my $var;

$var = 10;
$var++;

この場合は変数 $var に数値の 10 を格納した後で、変数 $var に格納されている値を 1 だけ増加させます。この結果変数 $var には数値の 11 が格納されます。

これは次のように記述した場合と同じです。

my $var;

$var = 10;
$var = $var + 1;

どちらも変数の値を 1 だけ増加させるという点では同じですが、インクリメント演算子を使って記述した方が簡潔に記述することができます。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my $var;

$var = 3;
print "変数 = $var\n";

$var++;
print "変数 = $var\n";

$var--;
print "変数 = $var\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

インクリメント演算子とデクリメント演算子(1)

インクリメント演算子およびデクリメント演算子を使って変数の値を増減させました。

演算子の前置きと後置きの違い

インクリメント演算子とデクリメント演算子には、それぞれ前置きと後置きの二種類が存在します。

インクリメント演算子の前置きと後置きは次のようになります。

前置き:  ++変数
後置き:  変数++

デクリメント演算子の前置きと後置きは次のようになります。

前置き:  --変数
後置き:  変数--

前置きと後置きの違いを確認します。次の例を見てください。後置きのインクリメント演算子を使用しています。

my ($var1, $var2);

$var1 = 10;
$var2 = $var1++;

この場合、変数 $var2 には変数 $var1 に格納されている数値に 1 が加算された 11 が格納されるように思われますが実際には 10 が格納されます。実は上記の例は次のように記述した場合と同じです。

my ($var1, $var2);

$var1 = 10;
$var2 = $var1;
$var1 = $var1 + 1;

後置きの場合にはインクリメント演算子による演算以外の処理を先に行います。つまり $var2 = $var1 がまず行われるということです。その為、変数 $var2 には 1 を増加させる前の 10 が格納されます。そして最後にインクリメント演算子の演算が行われるため変数 $var1 に格納されている値が 1 だけ増加されます。

では次に前置きのインクリメント演算子を使った例を見てみます。

my ($var1, $var2);

$var1 = 10;
$var2 = ++$var1;

上記の場合は変数 $var2 には 11 が格納されます。前置きの場合には次のように記述した場合と同じです。

my ($var1, $var2);

$var1 = 10;
$var1 = $var1 + 1;
$var2 = $var1;

前置きの場合にはインクリメント演算子による演算をまず先に行います。つまり $var1 = $var1 + 1 がまず行われるということです。そしてインクリメント演算子以外の処理が行われます。この時点で変数 $var1 は 1 増加していますので変数 $var2 には 11 が格納されることになります。

デクリメント演算子の場合も同様で前置きの「--変数」の場合にはまず 1 だけ減算する処理が行われるのに対して、後置きの「変数--」の場合には他の処理が行われてから 1 の減算の処理が行われます。

前置きと後置きでは単独で実行した場合には同じ結果となりますが、インクリメント演算子やデクリメント演算子と他の処理を組み合わせて使う場合には前置きと後置きで結果が異なることがありますので注意して下さい。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my ($var1, $var2);

$var1 = 9;
$var2 = $var1++;

print "変数1 = $var1\n";
print "変数2 = $var2\n";

print "----\n";

$var1 = 9;
$var2 = ++$var1;

print "変数1 = $var1\n";
print "変数2 = $var2\n";

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

演算子の前置きと後置きの違い(1)

インクリメント演算子を前置きと後置きにした場合で、結果がどのように違うのかについて確認できました。

-- --

Perl におけるインクリメント演算子とデクリメント演算子の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。