0

我至少在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;
    }

现在我想知道人们使用标签的原因是什么?这似乎不是一个好主意。我只是想知道是否有人在现实世界的场景中使用这种类型的结构是有意义的。

4

1 回答 1

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 提供的数据结构有点粗糙,因此嵌套复杂。

你总是可以设置一个标志来控制你的循环退出,但我发现明智地使用标记的中断可以使代码更简洁。

发布脚本:此外,如果我的代码检查团队和/或商店编码标准要禁止标签,我很乐意重写以符合要求。

于 2013-01-17T20:34:25.823 回答