Ich verstehe nicht, woher diese Regel "keine Labels verwenden" kommt. Wenn eine nicht-triviale Schleifenlogik ausgeführt wird, ist der Test zum Brechen oder Fortfahren nicht immer sauber am Ende des umgebenden Blocks.
outer_loop:
for (...) {
// some code
for (...) {
// some code
if (...)
continue outer_loop;
// more code
}
// more code
}
Ja, wie diese Fälle die ganze Zeit passieren. Was schlagen Leute vor, die ich stattdessen verwende? Eine boolesche Bedingung wie diese?
for (...) {
// some code
boolean continueOuterLoop = false;
for (...) {
// some code
if (...) {
continueOuterLoop = true;
break;
}
// more code
}
if (continueOuterLoop)
continue;
// more code
}
Yuck! Refactoring es als ein Verfahren lindert nicht, dass entweder:
boolean innerLoop (...) {
for (...) {
// some code
if (...) {
return true;
}
// more code
}
return false;
}
for (...) {
// some code
if (innerLoop(...))
continue;
// more code
}
Sicher ist es ein wenig schöner, aber es ist vorbei noch um eine überflüssige boolean. Und wenn die innere Schleife lokale Variablen modifiziert hat, ist das Refactoring in eine Methode nicht immer die richtige Lösung.
Warum also sind Sie alle gegen Etiketten? Geben Sie mir einige gute Gründe und praktische Alternativen für den obigen Fall.
* Update vier Jahre später: * Es gibt einen zunehmenden Trend zu funktionalen Sprachen wie Scala und Clojure, in denen der Rat, keine Labels zu verwenden, aus gutem Grund gültig ist. Aber für normales Java steht meine obige Antwort immer noch. –
Und Javascrpt sowie jede Event-basierte Sprache. Für Beans könnte es also nicht so nützlich sein, es sei denn, dies wäre Teil einer sehr (wahrscheinlich zu) langen Ereignisbehandlung. – Cheruvim
Neugierig, dass die Antwort mit der höchsten Antwort die ursprüngliche Frage überhaupt nicht beantwortet. ("* Ich habe mich gefragt, was die übliche Konvention für die Etiketten war. Alle Kappen? Erste Kappe? *) – Jonik