LoginSignup
0
1

More than 1 year has passed since last update.

【Swift】ラベル付きループ文の使い方

Last updated at Posted at 2020-07-25

はじめに


今回は、多重ループの内側から一気に抜け出す際に役立つ、ラベル付きループ文の書き方を紹介します。

ラベル付きループ文とは?


多重ループを構成するwhile文やfor文などにラベルを付けて置き、break文とcontinue文を使用する際、どのループから抜け出すのか、またはどのループの実行を継続するのかを、ラベルで指定する書き方です。
Swiftではあまり使われない方法ですが、場面によってはすごく効果的な手法になります。

具体的な書き方


ラベルはwhile文やfor文の前に、識別子と「:」を置きます。
break文ではラベルの付けられたループから抜け出し、そのループの次の文の実行に移ります。
continue文はラベルの付けられたループの残りの部分の実行をスキップして、次の繰り返しが可能かどうか、条件の判定に移ります。
実際の書き方を以下に示します。

loop1: while 条件~~ {
    loop2: while 条件~~{
        while 条件~~ {
            break loop1
            continue loop1

            break loop2
            continue loop2
        }
    }
}

ラベル付きループ文の実践例


実際にラベル付きループ文を使って書いてみた、うるう年判定のコード例を紹介します。

Leapyear.swift
leap: if year % 4 == 0 {
    if year % 100 == 0 {
        if year % 400 == 0 {
            print("\(year)年は400で割り切れるのでうるう年です。")
            break leap
        }
        print("\(year)年は100で割り切れるのでうるう年ではありません。")
        break leap
    }
    print("\(year)年は4で割り切れるのでうるう年です。")
}else {
    print("\(year)年は4で割り切れないのでうるう年ではありません。")
}

変数yearに様々な値を代入してLeapyear.swiftを実行すると、次のような出力が得られます。

出力
1996年は4で割り切れるのでうるう年です。   // year = 1996
2000年は400で割り切れるのでうるう年です。 // year = 2000
2017年は4で割り切れないのでうるう年ではありません。 // year = 2017
2100年は100で割り切れるのでうるう年ではありません。 // year = 2100

yearが2000の時、400で割り切れることがわかると、printを実行してからbreakで直ちにif文から抜け出すので、その下にあるprintは実行しません。
if文に対するbreakは必ずラベルが必要です。ラベルがなければ通常のループやswitch文からの脱出と解釈されます。また、if文もswitch文もループ文ではないので、continueでラベルを指定することはできません。

終わりに


今回はラベル付きループ文について解説しました。必要になる場面は限られますが、うまく使えれば効果を発揮するので、ぜひ頭の片隅に置いておいてください。

0
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
0
1