年収アップ無料転職カウンセリング実施中! | 転職エージェントはマイナビエージェント

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

switch命令

式の値によって処理を分岐する – switch命令
switch(exp) {
case val1:
statements
case val2:
statements
default:
statements
}
exp:任意の式
val1、2…:expと比較する値

switch命令は、与えられた式(変数)の値によって、処理を分岐します。式の値は、char/byte/short/int/String/enum型のいずれかでなければなりません(ただし、String型を使えるのはJavaSE 7以降)。
たとえば以下は、変数valの値(1…3)に応じて対応するメッセージを表示します。それぞれの値に応じて実行する処理はcase句で、すべての値に合致しなかった場合に実行する処理はdefault句で表します。

StatSwitch.java

package com.example.mynavi.control;

public class StatSwitch {
  public static void main(String[] args) {
    int val = 3;
    switch (val) {
      case 1:
        System.out.println("変数valは1です");
        break;
      case 2:
        System.out.println("変数valは2です");
        break;
      case 3:
        System.out.println("変数valは3です");
        break;
      default:
        System.out.println("変数valは1、2、3いずれでもありません");
        break;
    } // 結果:変数valは3です
  }
}

なお、case、default句の末尾は、break命令で終わるのが原則です。さもないと、次の句が続けて実行されてしまいます。句の区切り目で、自動的にブロックを抜けるわけではない点に注意してください。

note

フォールスルー
ただし、あえて句の終わりに、break命令を指定しないこともあります。例えば以下のような場合です。

switch (val) {
  case 1:
  case 2:
    ...中略...
    break;
  case 3:
    ...中略...
    break;
}

これによって、変数valが1、または2の場合に実行する命令群を表現できます。このような書き方をフォールスルーと言います。

Java12以降の新構文

Java 12以降では、switch命令に新たな構文が追加されました。執筆時点ではPreview機能ですが、今後の正式実装に向けて、理解しておくことをお勧めします。

StatSwitchNew.java

package com.example.mynavi.control;

public class StatSwitchNew {
  public static void main(String[] args) {
    String lang = "Ruby";
    @SuppressWarnings("preview")
    String category = switch(lang) {
      case "PHP", "Python", "Ruby" -> "スクリプト言語";
      case "Java", "C#", "C" -> "プログラミング言語";
      default -> "不明";
    };
    System.out.println(category);	// 結果:スクリプト言語
  }
}

ポイントとなる構文は、以下です。

(1)switch式

switchが式として表現できます。つまり、文の中でswitch命令を記述できます。なお、switch式では値を返さないパターンがあってはいけないので、default句は省略不可です。

(2)アロー演算子

case/default句を「値 -> 対応する式」の形式で表せます。アロー演算子では、句の末尾のbreak命令は不要となります。

(3)case値の複数列記

case句に、カンマ区切りで値を列記できます。従来のようにcase句そのものを列記する必要はありません。

[Caution]
switchの新構文は、執筆時点でPreviewの扱いです。Eclipseで利用した場合、以下のような警告が表示されます。
[プロジェクト・プロパティでプレビュー機能を有効にする]をクリックして、Preview機能を有効化してください。

▲Preview版に対する警告

また、Preview版を利用する場合は、@SuppressWarningsアノテーションでPreviewに対する警告を無効化しておきましょう。

制御構文
if命令
switch命令
while命令
do…while命令
for命令
拡張for命令
break命令
continue命令

年収アップ無料転職カウンセリング実施中! | 転職エージェントはマイナビエージェント

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職