break句とreturn句の違い vol.18
前回の続きの内容。
今回はbreak句とreturn句の違いについて述べていこうと思う。
while文のブロック後がどうなるのかに注目していただきたい。
まずはbreak句から。
1.breakの場合
public static void main(String[] args) {
int i = 0;
while (i < 3) { ⇐ここがwhileの処理ブロック
System.out.println(i);
if (i == 1) {
break;
}
i++;
} ⇐ここでwhile終了
System.out.println("break pattern");
}
先ほどから使用しているこのwhile文のブロック外に
System.out.println ("break pattern")を記述した。
コンソールにbreak patternが表示されるかどうか。
コンソールに表示してみよう。
0
1
break pattern
このように、while文が中断した後のwhile文のブロック外の処理が実行された。
2.returnの場合
public static void main(String[] args) {
int i = 0;
while (i < 3) { ⇐ここがwhileの処理ブロック
System.out.println(i);
if (i == 1) {
return;
}
i++;
} ⇐ここでwhile終了
System.out.println("return pattern");
}
コンソールにreturn patternが表示されるかどうか。
コンソールに表示
0
1
while文の後の
System.out.println("return pattern");が実行されなかった。
breakの場合はbreakを囲っているwhile文やfor文の繰り返しが終了し、次の処理に行くのだが、
returnの場合は、メソッドごと終了させてしまうのだ。
下記breakのイメージ
下記returnのイメージ
中断の強制範囲が広い順で並べると
return > break > continue
のような順になる。
3.while文を2つ使った例
public static void main(String[] args) {
int i = 0;
int y = 0;
while (i < 3) { ⇐一つ目のwhile文ブロック
System.out.println("i"+ i);
while (y < 3) { ⇐二つ目のwhile文ブロック
if(y == 1) {
break;
}
System.out.println("y" + y);
y++;
} ⇐二つ目のwhile文ブロック
i++;
} ⇐一つ目のwhile文ブロック
System.out.println("break pattern");
}
コンソールに表示
i0
y0
i1
y0
i2
y0
break pattern
while (i < 3)のブロックの中に、while (y < 3)を書きその中にif文でyが1の時while (y < 3)の処理を中断させるようにしている。
その結果yが1になった時、breakが行われ
while (y < 3)の処理が中断される。
その結果yは0しか表示されていない。
その外にあるwhile (i < 3)は問題なく0.1.2が表示された。
このように、breakの直近のwhile文やfor文に、影響を及ぼしている。
先ほどはbreakだったが今回はreturnで書いてみよう。
public static void main(String[] args) {
int i = 0;
int y = 0;
while (i < 3) { ⇐一つ目のwhile文ブロック
System.out.println("i"+ i);
while (y < 3) { ⇐二つ目のwhile文ブロック
if(y == 1) {
return;
}
System.out.println("y" + y);
y++;
} ⇐二つ目のwhile文ブロック
i++;
} ⇐一つ目のwhile文ブロック
System.out.println("return pattern");
}
これがreturnであればこうなる。
コンソールに表示
i0
y0
先ほどの文がbreakに代わりreturnになった。
yが1になったときreturnが行われる。
1になりreturnが実行された。そしてメソッド内全ての処理が中断された。
このようにbreakは直近のブロックのみだが、returnはメソッドブロックごと終了させてしまう。
メソッドブロックはpublic static void main(String[] args) {}
この波カッコの範囲がメソッドブロックに当たる。
メソッドブロックの範囲内で処理がおこなわれるのが基本だ。
メソッドブロックについてはこのご説明する。
長くなりすぎたが以上。
次回はfor文での記述をする。復習がてらに見ていただきたい。
では、また次回
元体育会系文系エンジニア石黒