経緯
リファクタリング中に私がswitch文を書き換えたのを見て、無口な先輩がすっ飛んできました。
「Switch文って何のために書いてる?」
switch文の狙い
無口な先輩曰く、switch文には複数のif文を見やすくする利点と、設定によっては二分探索を用いてコンパイラの最適化を図る利点があるらしい。
例えば以下のコードがある。
before.cs
switch (a_int)
{
case 1:
// 処理1
break;
case 2:
// 処理2
break;
case 3:
// 処理3
break;
case 4:
// 処理4
break;
case 5:
// 処理5
break;
default:
break;
}
これをコンパイラが最適化のために二分探索を用いて書き換えると、以下のようになるらしい。
after.cs
if (x <= 3){
if (x <= 2){
if (x == 1){
// 処理1
}
if (x == 2){
// 処理2
}
}else{
if (x == 3){
// 処理3
}
}
}else{
if (x == 4){
// 処理4
}
if (x == 5){
// 処理5
}
}
まとめ
switch文の条件は上から検討されるとは限らず、caseは条件を満たすよう十分に設置する必要がある。
前の Round関数が四捨五入か銀行丸かの件 もそうですが、無口な先輩、よく知ってますよね。自分もいっぱい知りたい。