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文を積極的に用いた方が良いと思います。

参考文献