LoginSignup
1
1

switch文は見やすさのためだけじゃなくて、二分探索でコンパイラの最適化を図る場合もあったし、上から順に実行されるとは限らない?

Posted at

経緯

リファクタリング中に私が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関数が四捨五入か銀行丸かの件 もそうですが、無口な先輩、よく知ってますよね。自分もいっぱい知りたい。

参考

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1