Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

  1. Home
  2. SwiftBeginner - About break and continue Statements

About break and continue Statements - Japanese Only

みなさまどうも。いかがお過ごしでしょうか。続きまして『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文』については以上になります。続いての記事では『クラス』と『インスタンス』についてやっていきましょう。

ではこの辺で失礼いたします。

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .