D言語を始めてみた 〜ラベルすごい〜

D言語にはラベルという機能がある。

空文を含めて任意の文がラベル付け可能で、 goto文の飛び先とできます。 continue 文や break 文の飛び先ともなり得ます。

…えっ

continue 文や break 文の飛び先ともなり得ます。

なんだってー!?!?

という訳でbreak文の説明を見てみる

break の後ろに Identifier が続いている時は、 その Identifier はbreak文を囲うループやswitchのラベルでなければならず、 break文によってそのループ等を終了します。

ほほうほほう。つまり二重ループのから直接脱出が可能になるんですね、というのはすぐに思い付く使い方ではないだろうか。

という訳で早速テストしてみる。

import std.stdio;

void main()
{
a: for(uint i; i<3; ++i){
    b: for(uint j; j<3; ++j){
        c: for(uint k; k<3; ++k){
                if(i+j+k==4)
                    break b;
                writeln(i, j, k);
            }
        }
    }
}

カウンタの合計が4になったらbのループを抜けるように書いてみた。結果は

000
001
002
010
011
012
020
021
100
101
102
110
111
200
201

こういう感じ。正しく動いてますね。