Javaに限った話ではないのですが、switch文には、break文が記述されています。
最初見たとき、breakってなぜ必要なのかと思い、調べたことをまとめました。
switch文とは
この記事を読んでいる方は、swtich文の意味を知らない人はいないと思いますが、念の為説明します。
switch文は、ある条件下におけるif文をスッキリ見やすくする条件分岐です。
ある条件は、以下の2つです。
条件1条件式が左辺と右辺で一致するかを比較する式である(変数==値)
条件2比較する値が整数、文字、文字列であること
以上の条件が揃っているif文は、switch文に変えることができます。
if文の別の書き方ということです。
例のようなif文をswtich文で記述することができます。
class Main{
public static void main(String[] args){
int num = 1;
if ( num == 1 ){
System.out.println("This is No.1");
}else if ( num == 2 ){
System.out.println("This is No.2");
}else if ( num == 3 ){
System.out.println("This is No.3");
}else{
System.out.println("Other than 1 2 3");
}
}
}
class Main{
public static void main(String[] args){
int num = 1;
switch ( num ){
case 1:
System.out.println("This is No.1");
break;
case 2:
System.out.println("This is No.2");
break;
case 3:
System.out.println("This is No.3");
break;
default:
System.out.println("Other than 1 2 3");
}
}
}
冗長なif文をスッキリ見やすくするswitch文ですが、breakという文があります。
if文にはそのような記述はありません。
では、なぜswitchにはbreakが必要なのでしょうか。
breakを外して実行する
上記のコードから8行目のbreakをなくして実行します。
class Main{
public static void main(String[] args){
int num = 1;
switch ( num ){
case 1:
System.out.println("This is No.1");
//break;
case 2:
System.out.println("This is No.2");
break;
case 3:
System.out.println("This is No.3");
break;
default:
System.out.println("Other than 1 2 3");
}
}
}
実行結果
This is No.1
This is No.2
This is No.1だけが表示されたいところ、This is No.2も表示されました。
これは、一体どういうことでしょうか。
switch文の正体
switch文は、条件に一致するcaseラベルまで処理を移動する命令文です。
break文で、処理を中断すると命令しない限り、移動したcaseラベル以下も実行されてしまうのです。
従って、This is No.1だけ表示したい場合、break文で明示的に処理を中断する必要があったというわけです。
まとめ
switch文は、if文の別の記述方法で、
条件式が左辺と右辺で一致するかを比較する式である(変数==値)かつ比較する値が整数、文字、文字列であるif文のとき、switch文で記述できる。
switch文は、条件に一致するcaseラベルまで処理を移動するだけの命令文。
下にcaseラベルが続く場合、break文を入れて処理を中断させる必要がある。