資格取得のための勉強で忙しく、今まで聞いたことのない概念、「ラベル付きステートメント」に出くわしました。例えば:
「ラベル」:「ステートメント」
L1: while(i < 0){
L2: System.out.println(i);
}
だから私の質問は..なぜですか?これはどのように便利で、いつこのようなものを使いたいのでしょうか?
私が知っている唯一の用途は、break
orcontinue
ステートメントでラベルを使用できることです。したがって、ネストされたループがある場合は、一度に複数のレベルから抜け出す方法です。
OUTER: for (x : xList) {
for (y : yList) {
// Do something, then:
if (x > y) {
// This goes to the next iteration of x, whereas a standard
// "continue" would go to the next iteration of y
continue OUTER;
}
}
}
例が示すように、ネストされた方法で一度に 2 つのことを反復している場合 (一致を検索するなど)、続行したい場合、または通常の反復を行っているが、何らかの理由でネストされたfor
ループで中断/継続します。
ただし、数年に一度しか使用しない傾向があります。めったに使用されない構造であるため、理解するのが難しいという点で鶏と卵があります。そのため、別の方法でコードを明確に記述できる場合は、ラベルの使用を避けます。
「見つかりません」フラグの必要性を回避するために使用できます。
FOUND: {
for(Type t: list)
if (t.isTrue())
break FOUND;
// handle not found.
}
これはおそらくラベルの誤用ですが、ラベルを使用してループなしで中断できます。
LABEL: {
if(condition)
break LABEL;
// do something
}
また、人々を混乱させるためにも使用される可能性があるため、避けるべき十分な理由です。;)
http://www.google.com
while(true) break http;
break
これは、残りの返信で見落とされる可能性が高い過度の例です。switch{} ステートメント内でループを中断できます。
loop: for(;;){
int c=in.read();
switch(c){
case -1:
case '\n':
break loop;
case 'a':
processACommand();
break;
case ...
default:
break;
}
}
私はそれらをコメント ステートメントとして使用していました :) 冗談はさておき、これは基本的な Go to ステートメントのようなもので、コード行にジャンプすることができます。つまり、深いループ構造の最中に...
使用法:
scan: {
int c;
for (firstUpper = 0 ;
firstUpper < count ;
firstUpper += Character.charCount(c)) {
c = codePointAt(firstUpper);
if (c != Character.toLowerCase(c)) {
break scan;
}
}
return this;
}
Javaを書きながらFortranを書くために必要だと思います。それらがなければ、本物のプログラマー がどの言語を使っていようともFortran で書いた格言は無効になる可能性があります。
他の回答が述べているように、ラベルは Java 言語のほとんど使用されない部分です。
しかし、あなたの場合、他のいくつかのことを考慮する必要があります:
ラベルは非常に「一般的」で、実際には行番号です: L1
、L2
、 ...
ラベルはコードでは使用されません。
あなたは認定のための教材を勉強しています。
これはL1
、L2
ラベルが単なる行番号であることを意味します。コードを説明するテキストはその行番号を参照していると思います。同様に、一部の本や論文では、テキスト内で参照するため、または引用を容易にするために、すべての数学用語を列挙しています。