Java 编码标准/最佳实践 - 中断/继续标签的命名约定
2022-09-01 19:38:50
有时,标记的中断或继续可以使代码更具可读性。
OUTERLOOP: for ( ;/*stuff*/; ) {
//...lots of code
if ( isEnough() ) break OUTERLOOP;
//...more code
}
我想知道标签的共同惯例是什么。全部大写?第一个帽子?
有时,标记的中断或继续可以使代码更具可读性。
OUTERLOOP: for ( ;/*stuff*/; ) {
//...lots of code
if ( isEnough() ) break OUTERLOOP;
//...more code
}
我想知道标签的共同惯例是什么。全部大写?第一个帽子?
我不明白这个“不使用标签”规则从何而来。当执行非平凡的循环逻辑时,中断或继续的测试并不总是整齐地位于周围块的末尾。
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
}
当然,它有点漂亮,但它仍然传递着一个多余的布尔值。如果内部循环修改了局部变量,则将其重构为方法并不总是正确的解决方案。
那么,为什么你们都反对标签呢?给我一些坚实的理由,以及上述情况的实用替代方案。
如果您必须使用它们,请使用大写字母,这会引起人们对它们的注意,并将它们从错误地解释为“类”名称中单独挑出来。引起人们对它们的关注还有一个额外的好处,那就是吸引某人的眼球,这些眼球会随之而来,重构你的代码并删除它们。;)