C言語やjavascriptなどのプログラミング言語にはインクリメント演算子がある。
インクリメント演算子は変数の数値を1加算する動作する。
i++ // 後置インクリメント
++i // 前置インクリメント
インクリメント演算子には前置インクリメントと後置インクリメントがあり、違いは評価値が違うこと。
前置インクリメントは1加算したあとの値、後置インクリメントは1加算する前の値を評価値として返す。
C言語では++iはi++より早い
C言語だと++iはi++よりパフォーマンスが良い。以下の記事が参考になる。
この記事によると++iはi++に比べて一時的な変数を使用しないため動作が早いようだ。
jsでも検証してみた
検証コード↓
const TIMES = 1000000;
let tmp = 0;
function test1() {
for (let i = 0; i < TIMES ; ++i) {
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;++tmp;
}
}
function test2() {
for (let i = 0; i < TIMES ; ++i) {
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;tmp++;
}
}
performance.mark('test1Begin');
test1();
performance.mark('test1End');
performance.mark('test2Begin');
test2();
performance.mark('test2End');
performance.measure(
'test1',
'test1Begin',
'test1End'
);
performance.measure(
'test2',
'test2Begin',
'test2End'
);
console.log(performance.getEntriesByName('test1')[0]);
console.log(performance.getEntriesByName('test2')[0]);
結果
++i: 169ms
i++: 169ms
ほぼ同じだったのでjavascriptでは前置後置のパフォーマンスの違いを意識しなくて良いようだ。