在编程中使用标签

时间:2013-01-17 15:01:59

标签: coding-style

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

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

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

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

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