Michael Borgwardt の回答に追加すると、便宜上次のようなことができます (先日、Java rt.jar ソース コードを読んでいるときにこれを発見しました)。
BlockSegment:
if (conditionIsTrue) {
doSomeProcessing ();
if (resultOfProcessingIsFalse()) break BlockSegment;
otherwiseDoSomeMoreProcessing();
// These lines get skipped if the break statement
// above gets executed
}
// This is where you resume execution after the break
anotherStatement();
さて、これは論理的に次と同等です。
if (conditionIsTrue) {
doSomeProcessing ();
if (!resultOfProcessingIsFalse()) {
otherwiseDoSomeMoreProcessing();
// More code here that gets executed
}
}
anotherStatement();
ただし、余分なブレース (およびブレースに付属するインデント) の一部をスキップできます。おそらく、見た目がすっきりしていて (私の意見ではそうです)、このスタイルのコーディングが適切で混乱が少ない場所がいくつかあります。
if
したがって、ループだけでなく、ステートメントを超えてラベルを使用することもできます。たとえば、これは有効な Java 構文です (次のようなことを行う理由を思いつくかもしれません)。
statementOne();
statementTwo();
BlockLabel: {
statementThree();
boolean result = statementFour();
if (!result) break BlockLabel;
statementFive();
statementSix();
}
statementSeven();
ここでbreak
が実行されると、実行はラベルで示されるブロックの最後までスキップされ、スキップされstatementFive()
ますstatementSix()
。
このスタイル (if
ステートメントなし) の有用性は、スキップしなければならないブロック内にブロックがある場合により明白になります。 一般に、ループを十分に賢く使用すれば、すべてを達成できます。ただし、ループのないラベルを使用すると、コードが読みやすくなる場合がいくつかあります。たとえば、パラメータを順番にチェックする必要がある場合は、これを行うか、例外をスローします。最終的には、コードの清潔さと個人的なスタイルの問題になります。