Swift break文とcontinue文による繰り返し処理の中断

Swiftには繰り返し処理の制御構文としてfor文とwhile文が用意されています。
それぞれの基本的な利用方法については以下の記事を参照してください。

関連記事

今回の記事ではSwiftのfor文による繰り返し処理についてまとめていきます。 for文とは Swiftのfor文は配列や辞書などの複数の要素を持つ型の要素を順に取り出し同じ処理を行っていく繰り返し処理の構文です。繰り返し処理[…]

Swiftロゴ
関連記事

今回の記事ではSwiftのwhile文についてまとめます。while文は繰り返し処理を行う制御構文の一つです。 wile文とは while文は指定した条件式が成り立つ間同じ処理を繰り返し行う制御構文です。同じ繰り返し処理の制御[…]

Swiftロゴ

この記事では、これらの繰り返し処理の実行文を中断して制御するbreak文とcontinue文についてまとめていきます。
繰り返し処理は処理が重くなる原因になり得るものなので、パフォーマンスを高めるためにも適切に処理の中断を行うことが重要です。
それぞれで挙動が異なるので、しっかりと理解した上で正しく利用できるようにしていきましょう。

break文

break文は繰り返し処理全体を終了させる制御文です。

llet names = ["Taro", "Jiro", "Hanako", "Jun", "Miki"]

// 名前の配列と検索する名前を引数で受け取り、
// 配列にその名前が存在する場合はその名前を返却し存在しない場合は空文字を返す
func searchName (names: [String], target: String) -> String {
    var ret = ""
    for name in names {
        if (name == target) {
            ret = name
            // 検索する名前が見つかった時点で繰り返し処理全体を終了する
            break
        }
    }
    return ret
}

let searchJun = searchName(names: names, target: "Jun")
print(searchJun)

// >>> Jun

break文は繰り返し処理全体を終了させるので、それ以降の処理をする必要がない場合に利用します。

continue文

continue文は現在の処理を中断し、次の繰り返し処理に移ります。

let numArray = [1, 3, 6, 8, 10, 13, 15]

// 数字の配列と除外する倍数の基となる数字を引数で受け取り、
// 除外した後の配列を引数で返す
func excludeMultipleNum(numArray: [Int], excludeNum: Int) -> [Int] {
    var ret: [Int] = []
    for num in numArray {
        if num % excludeNum == 0 {
            // excludeNumの倍数の場合、処理を中断し次の繰り返し処理へ
            continue
        }
        ret.append(num)
    }
    return ret
}

print(excludeMultipleNum(numArray: numArray, excludeNum: 3))
// >>> [1, 8, 10, 13]

continue文は繰り返し処理自体は最後まで行われるため、各処理毎に処理の中断を行いたい場合に利用します。

while文での利用例

上記の2つの例ではfor文を利用していましたが、while文でも利用できます。

下記の例では条件式にtrueを指定して繰り返し処理を実行させ続け、numに1ずつ加算して3の倍数の場合は処理をスキップさせ、numが10になった時点で繰り返し処理を終了させています。

var num = 0

while true {
    num += 1
    if num % 3 == 0 {
        continue
    }
    print(num)
    if num == 10 {
        break
    }
}

// >>> 1
// >>> 2
// >>> 4
// >>> 5
// >>> 7
// >>> 8
// >>> 10

ラベルによる制御対象の指定

繰り返し処理にはラベルを付けることができ、ラベルを指定することでbreak文やcontinue文の制御対象を指定することができます。
繰り返し処理文・break文・continue文にラベル指定は以下のように記述します。

ラベル名:繰り返し処理文
break ラベル名
continue ラベル名

実際の利用例は以下のようになります。

// 利用例
let names = ["Taro", "Jiro", "Jun", "Hanako", "Miki", "Kyoko"]

nameLabel: for name in names {
    charLabel: for char in name {
        if char == "H" {
            print("\(name) contains \"H\"")
            break nameLabel
        }
        if char == "o" {
            print("\(name) contains \"o\"")
            break charLabel
        }
    }
    print("\(name) is over")
}

// >>> Taro contains "o"
// >>> Taro is over
// >>> Jiro contains "o"
// >>> Jiro is over
// >>> Jun is over
// >>> Hanako contains "H"

上記の例でbreak文で指定するラベルで終了させる繰り返し処理が変わり、挙動が変化することがわかります。

まとめ

  • break文・continue文によって繰り返し処理を中断し制御することができる
  • break文は繰り返し処理全体を終了させる
  • continue文は現在の処理を中断し後続の繰り返し処理に移る
  • ラベルによってbreak文・continue文の制御対象を指定することができる

適切な繰り返し処理の中断はプログラムのパフォーマンスを向上させることができます。
無駄な処理を行わないようにしっかりと理解し適切に利用していきましょう。
ここまで読んでいただきありがとうございました。
それでは、また。