i++と++iの違いに関する覚書

2018年12月18日C/C++,JavaScript,Programming,TECHNOLOGY

覚書です。

 

i++と++i、みなさんどっち使ってますか?

あまり意識してないと思いますが、この二つにはしっかりと違いがあります。

++iはプレフィックス形式、i++はポストフィックス形式です。

どんな違いか、コードをみてみましょう

JavaScript :

let i = 0;

console.log(i);   // 0
console.log(++i); // 1
console.log(i);   // 1


i = 0;
console.log(i);   // 0
console.log(i++); // 0
console.log(i);   // 1

 

C/C++ :

#include <stdio.h>

int main(){
    int i = 0;

    printf("i = %d\n", i);     // 0
    printf("++i = %d\n", ++i); // 1
    printf("i = %d\n", i);     // 1

    i = 0;

    printf("i = %d\n", i);     // 0
    printf("i++ = %d\n", i++); // 0
    printf("i = %d\n", i);     // 1

    return 0;
}

 

という風に、先に計算されるのか後に計算されるかの違いがあります。

これはどのような時に不都合かというと

JavaScript :

let i = 0;
while(++i < 5) console.log(i);

// 結果
// 1
// 2
// 3
// 4
let i = 0;
while(i++ < 5) console.log(i);

// 結果
// 1
// 2
// 3
// 4
// 5

 

C/C++ :

int i = 0;
while(++i < 5) printf("%d\n", i);

// 結果
// 1
// 2
// 3
// 4
int i = 0;
while(i++ < 5) printf("%d\n", i);

// 結果
// 1
// 2
// 3
// 4
// 5

という風にループ数に違いが発生するという影響があります。

 

結果としては

・ ++i の作用は式の値として、i + 1 の値を返す事、副作は i に i + 1 の結果が代入される。
・ i++ の作用は式の値として、i の値を返す事、副作用はその後 i に i + 1 の結果が代入される。

と言った違いになります。

ただ、for文のようにi++や++iが単独で現れて副作用の結果のみが使用される場合は違いがないそうです。

 

新訂版MORE EFFECTIVE C++ (ADDISONーWESLEY PROFESSIONAL CO)

新訂版MORE EFFECTIVE C++ (ADDISONーWESLEY PROFESSIONAL CO)

スコット メイヤーズ
4,180円(09/25 03:47時点)
発売日: 2014/02/28
Amazonの情報を掲載しています
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

Dustin Boswell, Trevor Foucher
2,640円(09/25 03:47時点)
発売日: 2012/06/23
Amazonの情報を掲載しています
JavaScript逆引きレシピ 第2版

JavaScript逆引きレシピ 第2版

山田 祥寛
2,772円(09/25 03:47時点)
発売日: 2018/10/15
Amazonの情報を掲載しています