Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Swift
入門編
- トップページ
- Swift入門編 - 処理を抜けるbreak文とcontinue文について
処理を抜けるbreak文とcontinue文について
みなさまどうも。いかがお過ごしでしょうか。続きまして『break文』と『continue文』についてやっていきましょう。
まず『break文』の基本的な使い方からです。『break文』はswitch文の解説のところでもちょろっと出てきましたね。
『break文』は「『switch文』やループ処理などを終了する」ことができる構文になります。記述方法は単純に処理を終了させたいところに『break』と書くだけでOKです。
では以下に『switch文』で『break文』を使用したサンプルを用意したのでちょいと確認してみましょう。
let n = 1 switch n { case 1: break // ここで『switch文』の処理が終了します。 print("1です。") // 前の行で『break文』があるためここは実行されません。 default: print("defaultです。") }
上記の『break』ってところに注目です。その下に『print("1です。")』という処理が書いてありますが手前の『break』のところで処理が終了させられるため、上記の処理はなにも出力することなく終了します。
では『for-in文』で『break』を使用してみましょう。以下のサンプルを見てみて下さい。ちょいと練習がてら『if文』と組み合わせてみます。
for i in 0...10 { // 11回ループさせます。 if i >= 3 { // 『i』が『3』以上になったときに実行します。 break } print(i) }
上記の『if文』のところに注目してみましょう。『if文』の条件式が『i >= 3』となっているため、『i』の中身が『3』以上になったときに『break』が発動する、といった処理になっていますね。
というわけでこれを実行させるとこんな結果になります。
0 1 2
11回ループするはずのところが『i』が『3』になった時点で処理が終了されているようですね。これが『break文』の効果になります。『while文』とか『repeat-while文』でも同じような使い方でOKです。
var n = 0 while true { if n >= 3 { break } print(n) n = n + 1 } var _n = 0 repeat { if _n >= 3 { break } print(_n) _n = _n + 1 } while true
上記の『while文』と『repeat-while文』の条件式のところにも注目してみましょう。両方共に『true』と直接記述されているため通常ならば無限ループ処理になるところですが、『break文』を使うことによってループ処理を終了させることが出来ています。こういう使い方をされることが多いので覚えておいて下さい。
『break文』についてはこんな感じです。
続いて『continue文』です。
『continue文』は「次のループ処理の先頭に飛ぶ」ことができる構文になり、『continue文』は『break文』と同じく単純に『continue』と記述するだけでOKです。
なんのこっちゃって思った方が多いと思いますのでちょいと以下のサンプルを確認してみましょう。
for i in 0...10 { // 11回ループさせます。 if i % 3 == 0 { continue } print(i) }
上記は『i』の中身が『3』で割り切れたときに『continue文』が実行されるようにしています。つまり「『i』の中身が『3』で割り切れたときにそのループは飛ばされて次のループに移る」という動作になりますので、上記のサンプルの実行結果は以下になります。
1 2 4 5 7 8 10
『3』と『6』と『9』が飛ばされていますね。これが『continue文』の動作になります。
『while文』や『repeat-while文』でも同じような使い方になります。
var n = 0 while n <= 10 { n = n + 1 if n % 3 == 0 { continue } print(n) } var _n = 0 repeat { _n = _n + 1 if _n % 3 == 0 { continue } print(_n) } while _n <= 10
あとちょっと注意点ですが、上記のように構築した場合で更新処理の記述場所には注意して下さい。以下のようにするとバシッと無限ループ突入します。
// これらは無限ループになりますので実行しないで下さい。 var n = 0 while n <= 10 { if n % 3 == 0 { continue } print(n) n = n + 1 } var _n = 0 repeat { if _n % 3 == 0 { continue } print(_n) _n = _n + 1 } while _n <= 10
この理由は『continue』が記述されてしまっていることで、処理が次のループに移ってしまってるせいだったりします。
『continue』が記述されているよりも下に更新処理である『n = n + 1』と『_n = _n + 1』が記述されていますよね。なので『continue』が実行された時は更新処理が行われない、つまり無限ループになる、といった感じになります。
// これらは無限ループになりますので実行しないで下さい。 var n = 0 while n <= 10 { if n % 3 == 0 { continue // 『continue』が実行された時に『n = n + 1』の演算が行われないため『n』の値が更新されず、無限ループになります。 } print(n) n = n + 1 } var _n = 0 repeat { if _n % 3 == 0 { continue // 『continue』が実行された時に『_n = _n + 1』の演算が行われないため『_n』の値が更新されず、無限ループになります。 } print(_n) _n = _n + 1 } while _n <= 10
ここ間違いやすいところなんで注意して下さい。
そしてもういっちょ注意点ですが、次のループ処理の開始地点は一番先頭部分となります。こちらも間違えないようにして下さい。
for i in 0...10 { // 11回ループさせます。 // 次のループはこの辺から始まります。 if i % 3 == 0 { continue } print(i) }
そして『continue文』は「次のループ処理へ移る」という動作になりますので使用できるのはループ処理の中のみとなります。こちらもご注意です。
if true { continue // エラーです。 }
というわけで『break文』と『continue文』については以上になります。続いての記事では『クラス』と『インスタンス』についてやっていきましょう。
ではこの辺で失礼いたします。
この記事は桜舞が執筆致しました。
著者が愛する小型哺乳類 |
桜舞 春人 Sakurama HarutoISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。 |
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。