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 に答える