【Swift】break文とcontinue文

break文 とは、for文 や switch文 などのループ処理を中断する事ができる構文です。
基本的には if文 などと併用して条件を付けて使います。
ループ中に、もし指定した条件を満たしたらループを中断して、次の処理に移りたい時などに使います。

前回は 集合型 について書きました。

今回は break文 と continue文 について書いていこうと思います。

break文

break文 とは

break文 とは、for文switch文 などのループ処理を中断する事ができる構文です。
基本的には if文 などと併用して条件を付けて使います。
ループ中に、もし指定した条件を満たしたらループを中断して、次の処理に移りたい時などに使います。

for文 についてはこちらの記事で紹介しています。 

if文 についてはこちらの記事で紹介しています。

break文 の使い方

使い方は break と書くだけです。

break

break文 を使った例

let slot = [145, 214, 405, 315, 777, 343]

for i in 0 ..< 20 {
    let stop = slot.randomElement()
    print("\(i)回転目 : \(stop ?? 123)")
    
    if stop == 777 {
        print("大当たり!")
        break
    }
}

//実行結果
/*
0回転目 : 315
1回転目 : 315
2回転目 : 343
3回転目 : 315
4回転目 : 145
5回転目 : 145
6回転目 : 315
7回転目 : 214
8回転目 : 405
9回転目 : 777
大当たり!
*/

配列slot に 3 桁の整数を要素として複数代入しています。
for文 は最大 20 回ループするようにしました。
処理は 配列slot の要素をランダムに取り出して、取り出した値を 定数stop に代入します。
print( ) で何回目のループなのかと 定数stop に代入された値を出力します。
if文 で、もし 定数stop に代入された値が 777 だったら、print( )”大当たり!” と出力して、break で中断します。
for文 は 20 回としていますが、20 回ループする前に 777 が選択されたら途中でも for文 を中断します。
また、777 が選択されなければ 20 回ループして for文 を中断します。

randomElement( ) メソッドはコレクション型の要素をランダムに返すメソッドです。返ってくる値は Optional型 なのでアンラップして print( ) で出力しています。

Optional型 についてはこちらの記事で紹介しています。

break-continueコードimg

continue文

continue文とは

continue文 とは、continue と書いた後の処理をスキップする事ができる構文です。
break文 はループ自体を中断して次の処理に移行しますが、continue文 は次回のループ処理に移行する。という違いがあります。
break文 同様 continue文 も条件を付けて使う場合が多いので、if文 などと併用することが多いと思います。

continue文 の使い方

使い方は continue と書くだけです。

continue

continue文 を使った例

上の break文 のコード例を流用

let slot = [145, 214, 405, 315, 777, 343]

for i in 0 ..< 20 {
    let stop = slot.randomElement()
    if stop == 777 {
        print("jackpot!")
        continue
    }
    print("\(i)回転目 : \(stop ?? 123)")
}

//実行結果
/*
0回転目 : 214
1回転目 : 405
2回転目 : 405
3回転目 : 315
4回転目 : 214
jackpot!
6回転目 : 214
7回転目 : 315
8回転目 : 405
9回転目 : 315
10回転目 : 343
11回転目 : 343
12回転目 : 343
13回転目 : 405
jackpot!
15回転目 : 145
16回転目 : 405
17回転目 : 343
18回転目 : 145
19回転目 : 343
*/

for文 は 20 回ループ、処理は 配列slot の要素をランダムに取り出して、取り出した値を 定数stop に代入します。
もし 定数stop に代入された値が 777 だったら、jackpot! と出力し continue して、一番下の print( ) はスキップして次回のループに移行します。
777 以外であれば if文 の条件から外れているので、if文 はスキップされて 一番下の print( ) で何回目のループなのかと 定数stop に代入された値を出力します。
つまり、777 だった時のみ continue して次回のループに、それ以外は continue されずに回転数と値を出力する、という流れになります。

break文break と書かれた後 for文 自体を中断してループを抜けてしまいますが、
continue文continue と書かれた後の処理をスキップするだけなので、for文 は指定通り20 回ループされています。

break-continueコードimg2

以上 break文 と continue文 についてでした。

次回は guard文 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

【Swift】while文

while文とはループ処理をすることができる構文です。
前の記事で書いたfor文もループ処理をすることができる構文ですが、
for文はループさせる回数を指定するのに対し、while文は条件から外れるまでループさせる構文で、条件式がtrueの間はループさせ続けることができます。
何回繰り返すか未定のときなどに使います。

前回は Optional型 について書きました。

今回は while文 について書いていこうと思います。

while文とは

while文 とはループ処理をすることができる構文です。
前の記事で書いた for文 もループ処理をすることができる構文ですが、
for文 はループさせる回数を指定するのに対し、while文 は条件から外れるまでループさせる構文で、条件式が true の間はループさせ続けることができます。
何回繰り返すか未定のときなどに使います。

for文 についてはこちらの記事で紹介しています。

while文の書式

 while 条件式(Bool値) {
     処理
 }

while文 は頭に while キーワードを付けます。
条件式( Bool値 )のところには、論理演算子や比較演算子などを使って条件式を書いて { } の中にループさせたい処理を書きます。
条件式が true の間はループし続けるので、処理のところにループを抜ける処理を書くか、条件式にループが終わるように指定しないと無限にループしてしまうので注意が必要です。

論理演算子についてはこちらの記事で紹介しています。

比較演算子についてはこちらの記事で紹介しています。

while文を使った例

0 ~ 9 回目まで同じ処理をループさせる例

var a = 0
while a < 10 {
    print(a)
    a += 1
}

//実行結果
/*
0
1
2
3
4
5
6
7
8
9
*/

0 を代入した 変数 a を準備して、a の値が 10 より小さければ( 10 は含まない ) a の値を print して、a をインクリメントします。
a の値が 10 より大きくなったら( 10 を含む ) while文 を抜けるようにしました。
0 ~ 9 回目までは true なので 9 回目まではループされますが、10 回目は条件式から外れてfalse となるので、while文を抜けます。

※ ループから抜けるように条件式や処理を書かないと無限にループしてしまいます。

同じ処理を for文 で書いてみる

上の while文 と同じ処理を for文 で書くと、

for i in 0 ..< 10 {
    print(i)
}

//実行結果
/*
0
1
2
3
4
5
6
7
8
9
*/

結果は同じですが、while文 は条件式が true の間はループし続けるのに対し、for文 は回数( 範囲 )を指定してループさせるというところに違いがあります。

whileコードimg

repeat-while文

while文との違い

while文 は条件式を先に判定してから true であれば false になるまで処理がループされますが、
repeat-while文 は、先に処理を実行した後に、条件式を判定する。という違いがあります。
後に条件式が判定されるので、判定が true だろうが false だろうが最低でも 1 回は処理が実行されます。

repeat-while文の書式

 repeat {
     処理
 } while 条件式(Bool値)

repeat-while文 は頭に repeat キーワードを付けます。
{ } の中に処理を書いて、閉じかっこ } の後に while キーワードを書いて条件式を書きます。
先に処理、その後条件式の判定なので最低でも 1 回は処理が実行されます。

repeat-while文を使った例

条件式が true だった場合の例

var t = 0
repeat {
    print(t)
    t += 1
} while t < 10

//実行結果
/*
0
1
2
3
4
5
6
7
9
*/

repeat文 の処理が実行された後に、while文の条件式が判定されます。
条件式が false になるまでループします。

条件式が false だった場合の例

var f = 0
repeat {
    print(f)
    f += 1
} while f > 10

//実行結果
/*
0
*/

これは while文 の条件式が false なのでループはしませんが、条件式の判定よりも先に repeat文 の処理が実行されます。
その後に、条件式の判定で false となりrepeat-while文 から抜けます。
なので処理は最初の 1 回目だけ実行されてループから抜けます。

whileコードimg2

ループ処理といえば for文 を使うことが多いと思いますが、ループ処理したいけど何回ループさせるか未定の場合は while文 が適していると思います。
以上 while文 についてでした。

次回は 辞書型 について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/

【Swift】ネスト

ネストとは”入れ子”という意味で、ネスティングとも言います。
例えばfor文の中にfor文、if文の中にif文、for文の中にif文などを入れ子することをネストすると言います。

if文についてはこちらで紹介しています。

for文についてはこちらで紹介しています。

前回は 複合代入演算子 について書きました。

今回は ネスト について書いていこうと思います。

ネストとは

ネストとは”入れ子”という意味で、ネスティングとも言います。
例えば for文 の中に for文if文 の中に if文for文 の中に if文 などを入れ子することをネストすると言います。

if文 についてはこちらで紹介しています。

for文 についてはこちらで紹介しています。

for文の中にfor文

for文 の中に for文 をネストする例

//for文の中にfor文をネスト
for i in 0 ... 2 {
    for j in 0 ... 2 {
        print(i, j) //iとjに代入されている値をprintするだけの処理
    }
}

//実行結果
/*
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
 */


ij に代入されている値を print するだけの処理です。
は終了値を含む範囲演算子なので上の例だと最初の for文 も中の for文 も、 0,1,2 と、3 回繰り返します。

範囲演算子 についてはこちらで紹介しています。

※コードが流れていく順番
最初 for文i0 が代入されて中の for文 に進む

中の for文 が、0,1,2 と 3 回処理が繰り返される

最初の for文 に戻って次は 1 が代入されて中の for文 に進む

また中の for文 が、0,1,2 と 3 回処理が繰り返される

最初の for文 に戻って次は 2 が代入されて中の for文 に進む

また中の for文 が、0,1,2 と 3 回処理が繰り返される

最初の for文3 回目まで繰り返したので for文 から抜ける
という順番でコードが流れていきます。

nestコードimg

for文の中にif文

for文 の中に if文 をネストする例

//for文の中にif文をネスト
for i in 1 ... 10 {
    if i % 2 == 0 {
        print(i)
    }
}

//実行結果
/*
2
4
6
8
10
 */

for文 を 10 回繰り返して、もし i の値が偶数の値だった場合に printi の値を出力するというコードです。

if文 の条件式は i%2==0 となっています。
これは、もし i の値を 2 で割った余りが 0 だったら true なので、i の値を print で出力します。
余りが 0 じゃないということは奇数なので false となり、その場合 if文 はスキップされます。
==!= に変えると奇数のみの出力になります。

nestコードimg2


あまり多重にネストするとエラーの原因や、思った通りの処理にならなかったり可読性も下がりそうなので、使う時はよく考えて注意しながら使う必要がありそうです。
以上 ネスト についてでした。

次回は スコープ について書いていこうと思います。

実行環境

version
Xcode 14.2 (14C18)
Swift 5.2.4

公式ドキュメント

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/