へなちょこSEの考察

0x1E歳のへなちょこSEが、日々思うことを考察します。自社内、金融系を経て現在法人系PKG開発に従事。

ifとswitchの使い分けについて

仕事中、ふと気になって調べ物をしたのでその備忘録。

ifとswitchの使い分けって、あまり意識してしたことがなかったのですが、そう言えばどっちがいいもんなんだろうと疑問に思いました。
とりあえずググってみたところ、まぁだいたいの人は「2~3個までの分岐ならif、それ以上はswitchが良いんじゃない?」って感じでした。
確かに4個とか5個ととかなってくると、「 else if(a == 1) 」とかを大量に見るのも飽きてきます。
しかもswitchであればすべての分岐の前提条件が一緒であることが明白ですが、ifではちゃんと条件文を見ないとわかりません。

例えば下記のような文。

switch(value){
case 1:
	略
	break;
case 2:
	略
	break;
case 3:
        略
        break;
default:
	略
}


if ( value == 1 ){
  略
} else if ( value == 2 ){
  略
} else if ( value == 3 ){
  略
} else {
  略
}

どちらも同じ事を書いていますが、もしかしたらifの方では value != 2 が紛れ込んでいるかもしれません。
条件の判定ロジックをちゃんと確認しないといけない。
でも、switchでは判定ロジックは明白で、値にだけ注意すればいい。
そういう点で、間違いの紛れ込む可能性を減らすかもしれません。
もっとも、ifと違って {} がないため、breakを書き忘れることによる思わぬ動作という落とし穴もありますが。
この点では、コンパイルエラーになるif文のほうが安全と言えます。
どちらを取るかは、好みも入ってしまうかもしれませんね。


コーディングの人間的視点から見た場合はそんな感じなわけですが、こんなサイトも見つけました。

メモリ効率の向上 : Y's Software Library

メモリ効率を考えると、2つ以上の条件式があるならswitchの方が効率的とのこと。
確かに、if文は条件文が来るたびに式の評価を実施しますが、switchは式の評価は一回で済みます(言語やコンパイルオプションによって違うようですが)。
まぁ、そんなシビアなことを考える必要のあるプログラムを書くこともなかなかないですが、そういう視点も大事かもしれないですね。
メモリ効率がいいものを目指すと、見た目にも読みやすいコードになるような気もしますし。
ケース・バイ・ケースなのは間違いありませんが。