#Swiftで簡単に大域脱出をしたい
for文やwhile文、他にもcase文やSwitch文等を使って下のようにループ文の中でループ文を回すことがあると思います。
let my_array:[[Int]] = [[1,2,3],[4,5,6],[7,8,9]]
// 配列の配列に数字の5が含まれているか確認したい
func include_five(array_of_arrays:[[Int]]) -> Bool {
var include_five:Bool = false
var break_loop:Bool = false
for array in array_of_arrays {
for number in array{
if number == 5 {
// 5が含まれていたらbreakで抜ける
break_loop = true
include_five = true
break
}
}
if break_loop {
break
}
}
return include_five
}
print(include_five(array_of_arrays: my_array))
#ラベル付きループ文で簡単に外側のループを抜ける
もちろん、上のように記述することも可能ですが、ラベルをループ文につけることで簡単に外側のループまで抜けることができるようになります。
let my_array:[[Int]] = [[1,2,3],[4,5,6],[7,8,9]]
// 配列の配列に数字の5が含まれているか確認したい
var break_loop:Bool = false
func include_five(array_of_arrays:[[Int]]) -> Bool {
var include_five:Bool = false
outer_loop: for array in array_of_arrays {
inner_loop: for number in array{
print(number)
if number == 5 {
// 一気に外側のループを抜けられる
include_five = true
break outer_loop
}
}
}
return include_five
}
print(include_five(array_of_arrays: my_array))
// 1
// 2
// 3
// 4
// 5
// true
ラベルをつけることでfor文以外にもwhile文, case文, switch文, if文など様々なネスト構造のプログラムから指定したラベルの文まで抜けることが可能になります。もちろん、関数で定義している場合などはreturnすることで処理を少なくできますが、そうでない場合には今回紹介したラベル付き文を活用するとコードの可読性を上げたり、少しでも効率のよいコードを目指したりできそうです。