LoginSignup
3
1

More than 5 years have passed since last update.

Swiftのループ文で大域脱出

Posted at

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することで処理を少なくできますが、そうでない場合には今回紹介したラベル付き文を活用するとコードの可読性を上げたり、少しでも効率のよいコードを目指したりできそうです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1