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
こういう感じ。正しく動いてますね。