blocksで2重ループを脱出する

どうも、吉村です。

C系統の言語で2重ループの脱出はしばしば話題になります。
というのもbreak構文で脱出可能なのは1つだけなためですね。

実際にプログラムするなら、
例えば以下のようにようにフラグを一つ用意して抜け出す手法があります。

なんだか見通しが悪いです。
そこで悪名高いgotoを使ってやる方法もあります。

多少見通しがよくなりました。
が、gotoはちょっと・・・
という方のために、関数を作成する方法もあります。

しかし、いちいち必要な変数を引数に渡したり、
関数が一つ無駄に増えてしまう問題があったりします。

そこでblocksを使う妙案があります。

blockをその場ですぐ使うパターンです。
これなら関数もつくらず、しかも変数のキャプチャのおかげで外のスコープにもアクセスできます。

実際奇抜なコーディングは混乱を招くので、微妙かもしれませんが、
一つのアイディアとして提案する価値はあるかなと思います。