68
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swiftは多重ループなどを一気にbreakできる

Last updated at Posted at 2014-06-12

C言語(Objective-C)では、例えば二重ループからbreakで一気に抜ける事はできず、

  • フラグを立てて抜ける(冗長)
  • ループ箇所をまとめて関数化してreturnで抜ける
  • gotoで抜ける(嫌われがちですが、この場合においては有用だと個人的には思います)
  • forwhileの条件式で弾かれる値をループカウンタ等に突っ込む(ちょっと危険)

などなど工夫して抜けていたと思いますが、Swiftだとforwhileの前にラベルを書いておく事で簡単に多重ループからbreakできるようです。

サンプルコード
println("start!")
    
for_i: for i in 1...5 {
    for j in 1...5 {
        println("i=\(i) j=\(j)")
        if i == 2 && j == 2 {
            println("break for_i")
            break for_i
        }
    }
}
    
println("end!")
実行結果
start!
i=1 j=1
i=1 j=2
i=1 j=3
i=1 j=4
i=1 j=5
i=2 j=1
i=2 j=2
break for_i
end!

forループ中のswitch-caseの中で外側のforに対してbreakする事もできますので、覚えておくといざという時に役立つ予感です。

このラベル付けによる制御はfor, while, switch構文に対して、それぞれbreak, continueが出来るようです。

どうやらJavaでは同等の事が出来ていたようですので、この多重break(?)に対する既知の問題や論争などありましたらコメント頂ければ幸いです。

68
60
4

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
68
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?