本日実務で久しぶりにswitch文を実装する機会があったので、
Java silverにて学んだことをもう1度おさらいで備忘録として残そうかと思います。
Switch文利用の注意点
注意点は3つです。
基本的には、統合開発環境(eclipseなど)が赤線で教えてくれますが、
最初から知っていれば無駄な修正時間も省けます。
①:case文の処理後は、break or returnを忘れない
String status = "open";
int i = 0;
switch (status) {
case "open":
i++;
case "close":
i++;
break;//ここまで処理が実行されてしまう
}
これは統合環境(eclipseなど)でも赤線を引っ張られないので、記載漏れがあった場合、
テスト時に気づく必要があります。
case文に該当すれば、その中の処理が実施されますが、breakもしくはreturnをしないと次のcase文まで実行してしまいます。
②:case文で指定する値は定数でなければならない
public class A {
String status;
public void setStatus(String sts) {
this.status = sts;
}
public static void main(String[] args) {
int i = 0;
switch (status) {//statusが変数はエラー
case "open":
i++;
case "close":
i++;
break;
}
}
}
上記のコードで言えば、変数宣言時のstatusをstaticに変更する必要があります。
③:default文は必ず実行されるものではないが、書き順が大事
switch文1行目のdefault文は、必ず実行されてしまいます。
String status = "open";
int i = 0;
switch (status) {
default://必ず実行されてしまう
i++;
break;
case "open":
i++;
break;
case "close":
i++;
break;
}
逆に最後に持ってくると、どのcaseにも該当しなかった場合に必ず実行される処理になる。
String status = "open";
int i = 0;
switch (status) {
case "open":
i++;
break;
case "close":
i++;
break;
default://どのcaseにも該当しなかった場合にのみ実行
i++;
break;
}
終わりに
switch文は実務では利用することも少なく、見る機会も少ないです。
結局if文の方が便利で慣れ親しんでいるからでしょうか。
ですが、switch文を利用した方が見やすくなる時もあります。
覚えておいて損はないし、これからも使えそうであれば使っていこうと思います。
Enumとの相性が良いのかなと個人的には思いました。