if文とswitch文, どちらを積極的に使うべきか?

投稿日: 

C# Java

B!
James OsborneによるPixabay(https://pixabay.com/)からの画像

こんにちは, Shinoryoです.

今回は, if文とswitch文のどちらを積極的に使うべきかの見解をまとめてみました.

可読性

定数を列挙するような単純な条件分岐であれば, 次のような理由からswitch文の方が分かりやすくなると思います.

  • if文を使用した場合, 条件を判定する変数を何回も書く必要がある.
  • if文を使用した場合, ifの行, else ifの行, elseの行で条件式の位置が異なる.
  • if文を使用した場合, その他の種類の条件分岐が入り込む可能性がある.

Javaでif文を使った例です.

private static int ifMatching(String value) {
    if (value == "a") {
        return 0;
    } else if (value == "b") {
        return 1;
    } else {
        return -1;
    }
}

Javaでswitch文を使った例です.

private static int switchMatching(String value) {
    switch (value) {
        case "a":
            return 0;
        case "b":
            return 1;
        default:
            return -1;
    }
}

if文を使うメリット

if文を使うメリットについても, 考えられる範囲で補足します.

  • 複雑な条件にも対応できる.
  • うまく条件を記述すれば, NullReferenceExceptionNullPointerExceptionが発生しない.

パフォーマンス

言語によっては, switch文ではコンパイラーによる最適化が行われるため, switch文の方が高速です.

速度比較(C#)

実際に, if文とswitch文の速度の差を検証してみました.

検証環境は次のとおり.

  • OS:Microsoft Windows 11 Home
  • CPU:Intel64 Family 6 Model 154 Stepping 3 GenuineIntel ~2100 Mhz
  • メモリ:16 GB

検証に使用したコードは次のとおり.

結果は次のとおり. switch文の方が高速であり, if文との差は分岐の数が多いほど顕著になりました.

条件処理時間(ms)
if・3分岐37
if・10分岐27
if・100分岐77
switch・3分岐29
switch・10分岐292
switch・100分岐44

速度比較(Java)

実際に, if文とswitch文の速度の差を検証してみました.

検証環境は次のとおり.

  • OS:Microsoft Windows 11 Home
  • CPU:Intel64 Family 6 Model 154 Stepping 3 GenuineIntel ~2100 Mhz
  • メモリ:16 GB

検証に使用したコードは次のとおり.

結果は次のとおり. switch文の方が高速であり, if文との差は分岐の数が多いほど顕著になりました.

条件処理時間(ms)
if・3分岐21
if・10分岐13
if・100分岐113
switch・3分岐9
switch・10分岐24
switch・100分岐44

結論

switch文でも簡単に書けるような条件分岐である前提ですが, 可読性・パフォーマンスの両面から, switch文を積極的に用いた方が良いと思います.

参考文献