我至少在java中看过这个,我很确定它也存在于其他语言中,但我指的是这样的代码
label: {
if (someStatment) {
break label;
}
if (someOtherStatemnt) {
break label;
}
return a + b;
}
甚至:
int a = 0;
label: {
for(int i=0;i<10; i++){
if (a>100) {
break label;
}
a+=1;
}
现在我想知道人们使用标签的原因是什么?这看起来并不是一个好主意。我只是想知道是否有人有一个真实的世界场景,这对使用这种类型的结构是有意义的。
答案 0 :(得分:2)
当循环和case语句嵌套时,标记的断点会自成一体。这是我在过去6个月写的一些关于Java的例子:
Node matchingNode = null; //this is the variable that we want to set
Iterator<Resource> relatedNodes = tag.find();
outer:
while (relatedNodes.hasNext() && matchingNode == null) {
Node node = relatedNodes.next().adaptTo(Node.class);
if (honorIsHideInNav && NodeUtils.isHideInNav(node)) {
//we don't want to test this node
continue; //'continue outer' would be equivalent
}
PropertyIterator tagIds = node.getProperties("cq:tags");
while (tagIds.hasNext()) {
Property property = tagIds.nextProperty();
Value values[] = property.getValues();
for (Value value : values) {
String id = value.getString();
if (id.equals(tag.getTagID())) {
matchingNode = node; //found what we want!
break outer; //simply 'break' here would only exit the for-loop
}
}
}
}
if (matchingNode == null) {
//we've scanned all of relatedNodes and found no match
}
我使用的API提供的数据结构有点粗糙,因此复杂的嵌套。
你总是可以设置一个标志来控制循环退出,但我发现明智地使用带标签的断点可以使代码更加简洁。
发布脚本此外,如果我的代码检查团队和/或商店编码标准要禁止标签,我很乐意重写为符合标准。