Я не понимаю, откуда взято это правило "не использовать ярлыки". При выполнении нетривиальной логики зацикливания тест на разрыв или продолжение не всегда аккуратно в конце окружающего блока.
outer_loop:
for (...) {
// some code
for (...) {
// some code
if (...)
continue outer_loop;
// more code
}
// more code
}
Да, подобные случаи случаются постоянно. Что люди предлагают вместо этого использовать? Булево условие вроде этого?
for (...) {
// some code
boolean continueOuterLoop = false;
for (...) {
// some code
if (...) {
continueOuterLoop = true;
break;
}
// more code
}
if (continueOuterLoop)
continue;
// more code
}
Тьфу! Рефакторинг его как метода тоже не уменьшает:
boolean innerLoop (...) {
for (...) {
// some code
if (...) {
return true;
}
// more code
}
return false;
}
for (...) {
// some code
if (innerLoop(...))
continue;
// more code
}
Конечно, он немного красивее, но он все еще распространяется вокруг лишнего логического значения. И если внутренний цикл модифицировал локальные переменные, рефакторинг его в метод не всегда является правильным решением.
Так почему вы все против лейблов? Назовите несколько веских причин и практических альтернатив для вышеупомянутого случая.