if 文と3項演算子の違い
ちょっと実例を出して比較してみようと思う。
if(hoge)var = 1;はvar = (hoge?1:var);に置き換えられる。微妙に速くなると思うけど、実際どうなのかは分からない。
坂口和彦 on Twitter: "if(hoge)var = 1;はvar = (hoge?1:var);に置き換えられる。微妙に速くなると思うけど、実際どうなのかは分からない。"
今回は JVM での例を出してますが、大抵の手続き型言語で同じようなステップ踏むから一般的な話です。
とりあえず javac して javap をば。hoge と var はフィールドとして宣言されています。
test01
if (hoge) var = 1;
Code: 0: getstatic #2; //Field hoge:Z 3: ifeq 10 6: iconst_1 7: putstatic #3; //Field var:I 10: return
test02
var = hoge ? 1 : var;
Code: 0: getstatic #2; //Field hoge:Z 3: ifeq 10 6: iconst_1 7: goto 13 10: getstatic #3; //Field var:I 13: putstatic #3; //Field var:I 16: return
test03
if (hoge) var = 1; else var = var;
Code: 0: getstatic #2; //Field hoge:Z 3: ifeq 13 6: iconst_1 7: putstatic #3; //Field var:I 10: goto 19 13: getstatic #3; //Field var:I 16: putstatic #3; //Field var:I 19: return