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

数値の演算において 1 を加算する、または 1 を減算する演算はよく利用されます。加算演算子や減算演算子でも行うことはできますが、より簡潔に記述できる演算子としてインクリメント演算子とデクリメント演算子が用意されています。この演算子はオペランドの前に置くか後に置くかで 1 を加算や減算するタイミングが異なります。ここでは JavaScript におけるインクリメント演算子およびデクリメント演算子の使い方について解説します。

(Last modified: )

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

数値の数を 1 増やすまたは減らすといった演算は加算演算子(+)や減算演算子(-)を使うことで次のように記述することができます。

let num = 5;

num = num + 1;  // 1 を加える
num = num - 1;  // 1 を減らす

この 1 を加える演算を専用に行う演算子がインクリメント演算子、 1 を減らす演算を専用に行う演算子がデクリメント演算子です。

インクリメント演算子(++)はオペランドの右または左に ++ と記述します。

数値++
++数値

デクリメント演算子(--)はオペランドの右または左に -- と記述します。

数値--
--数値

オペランドの前に演算子を置く場合( ++数値 )を前置、オペランドのあとに演算子を置く場合( 数値++ )と後置と呼びます。この違いはこのあとで解説します。

それでは先ほどのサンプルをインクリメント演算子とデクリメント演算子を使って書き換えてみます。

let num = 5;

num++;
console.log(num);
>> 6

num--;
console.log(num);
>> 5

インクリメント演算子とデクリメント演算子を使うことで、変数に格納された値に対して 1 を加える、または 1 を減らすことができました。

インクリメント演算子やデクリメント演算子は繰り返し処理の for 文における変化式でよく使用されます。

for (let i = 0; i < 3; i++){
  console.log("i = " + i);
}

>> i = 0
>> i = 1
>> i = 2

繰り返し処理では繰り返しが 1 回行われるごとに変化式が実行されます。今回のサンプルでは変化式として i++ が記述されており、繰り返し処理が 1 回行われるごとに変数 i に格納された値に 1 が追加されていくことになります。

前置と後置

インクリメント演算子とデクリメント演算子にはそれぞれ前置と後置の二種類が用意されています。

++数値  前置
--数値  前置

数値++  後置
数値--  後置

前置であっても後置であってもインクリメント演算子は対象の変数の値を1だけ増加させ、デクリメント演算子の場合は対象の変数の値を1だけ減少させることに違いはありません。次のサンプルを見て下さい。

let num = 5;

num++;
console.log(num);
>> 6

++num;
console.log(num);
>> 7

前置であっても後置であってもこのような使い方の場合には同じ結果となります。

では次のサンプルをみてください。後置のインクリメント演算子を使っています。

let numA = 5;
let numB; 

numB = numA++;
console.log(numA);
>> 6

console.log(numB);
>> 5

後置のインクリメント演算子を使って numA の値に 1 を加算したあと、 numB に代入しています。変数の値をコンソールに出力してみると、 numA の値は元の値に 1 を加算したものとなっていますが、 numB の値は 1 が加算される前の値となっています。

後置のインクリメント演算子の場合、インクリメント演算子によって対象の数値に 1 が加えられます( 6 になる)が、演算を行った結果として演算前の値( 5 )を返します。今回の場合は変数 numB に演算を行った結果を代入していますので numB には 演算前の 5 が代入されます。

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

let numA = 5;
let numB; 

let temp = numA;
numA = numA + 1;
numB = temp;

console.log(numA);
>> 6

console.log(numB);
>> 5

今度は次のサンプルをみてください。前置のインクリメント演算子を使っています。

let numA = 5;
let numB; 

numB = ++numA;
console.log(numA);
>> 6

console.log(numB);
>> 6

前置のインクリメント演算子を使って numA の値に 1 を加算したあと、 numB に代入しています。変数の値をコンソールに出力してみると、 numA の値は元の値に 1 を加算したものであり、 numB の値も元の値に 1 を加算したものです。

前置のインクリメント演算子の場合、インクリメント演算子によって対象の数値に 1 が加えられます( 6 になる)が、演算を行った結果として演算後の値( 6 )を返します。今回の場合は変数 numB に演算を行った結果を代入していますので numB には 演算後の 6 が代入されます。

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

let numA = 5;
let numB; 

numA = numA + 1;
numB = numA;

console.log(numA);
>> 6

console.log(numB);
>> 6

このようにインクリメント演算子とデクリメント演算子は単独で使用する場合は違いはありませんが、他の演算子と組み合わせて使用する場合には前置と後置では動作が異なる場合がありますので注意して下さい。

-- --

JavaScript におけるインクリメント演算子およびデクリメント演算子の使い方について解説します。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。