【プログラミング初心者】Swift基礎~for文・while文~

はじめに

今回はプログラムの基本である繰り返しの方法について紹介します。
多少書き方の違いはありますがSwift以外の多言語全てで使用されるプログラムの基本構文の1つです。
この投稿で書き方をしっかりと覚えておいてください。

繰り返しとは

プログラムでは同じ処理を何度も繰り返して実行することが多くあります。
そんなときに繰り返し処理であるforwhileを使います。

例えば簡単な例でいくと、あるStringを格納した配列が定義されており、その内容全てを表示したいとします。
繰り返しを使わなければ以下のようになります。

var fruitsList = ["りんご", "みかん", "スイカ"]

print(fruitsList[0])  // りんご
print(fruitsList[1])  // みかん
print(fruitsList[2])  // スイカ

この配列の要素が100個になると100回print()を記述しなければなりません。

またプログラムの実行中にstringListに要素が追加された場合、その追加された要素に対して処理することができません。

そんなときに繰り返し制御を行って解決します。

for文

forの構文は以下となります。

for 定数 in 配列 {
    繰り返す処理
}

for文は上記の書き方をすると配列の0番目から要素が取り出され、定数に格納されます。
取り出された後処理ブロック内に書かれた処理を実行します。
配列の最後まで要素を取り出し処理が完了すると繰り返しが終了します。

最初の例をforを使って書き直してみます。

var fruitsList = ["りんご", "みかん", "スイカ"]
for fruits in fruitsList {
    print(fruits)
}
りんご
みかん
スイカ

また直接配列のインデックスを指定しているわけではないので、要素が追加されても対応できます。

var fruitsList = ["りんご", "みかん", "スイカ"]
for fruits in fruitsList {
    print(fruits)
}

print("--- 要素を追加 ---")

fruitsList.append("パイナップル")
fruitsList.append("いちご")
for fruits in fruitsList {
    print(fruits)
}
りんご
みかん
スイカ
--- 要素を追加 ---
りんご
みかん
スイカ
パイナップル
いちご

指定回数繰り返す

次の例は指定回数処理を繰り返す方法です。
※多言語のようなインデックスをインクリメントする方法はありません。

for index in 1...10 {
    print("index:\(index)") 
}
index:1
index:2
index:3
index:4
index:5
index:6
index:7
index:8
index:9
index:10

実はこの処理は先程説明した要素を取り出す方法と同じです。
今回配列部分に1...10と指定しました。
これは1~10のInt型配列を作る書き方です。
そのため作られた10要素を持つ配列から1つずつ要素が取り出されたというわけです。
(正確には配列ではなくRange<Int>という型です)

辞書型をfor文で処理する

辞書型も配列と同様にfor文で処理できます。

let fruitsList = ["apple": "りんご",
                  "mandarin_orange": "みかん",
                  "watermelon": "スイカ"]
for (key, value) in fruitsList {
    print("key: " + key)
    print("value: " + value)
    print("---")
}
key: watermelon
value: スイカ
---
key: mandarin_orange
value: みかん
---
key: apple
value: りんご
---

辞書型の場合、(key, value)のように要素を取り出しています。
これはTuple型といい、今回詳しくは説明しませんが複数の値を同時に扱う方法です。
メソッドのない構造体のようなイメージです。

辞書型の場合Tupleとして取り出すことができ、第一要素にキー、第二要素に値が入ってきます。
また(key, value)とわかりやすいように定義していますが、この変数名は自由に決めることができ、(a, b)というように取り出しても問題ありません。
重要なのは第一要素にキー、第二要素に値ということだけです。

while文

次はwhile文を紹介します。
whileの構文は以下となります。

while 継続条件 {
    繰り返す処理
}

継続条件はif文のようにBool型で与える必要があります。
継続条件がfalseとなったタイミングで処理を抜けます。

以下の例は整数を1ずつ足していき、合計が10になったら繰り返しを終了する処理です。

var sum = 0
while sum < 10 {
    sum += 1
    print("合計: \(sum)")
}
合計: 1
合計: 2
合計: 3
合計: 4
合計: 5
合計: 6
合計: 7
合計: 8
合計: 9
合計: 10

気をつけたいことは今回の例では発生することはあり得ませんが、条件文が常にtrueになってしまうと無限ループが発生してしまいます。
無限ループが発生するとそれ以降の処理は一切実行されず、アプリはフリーズしてしまいます。

簡単に無限ループさせるには以下のようにします。
※実行すると永遠に処理が走るので実行はおすすめしません。実行したとしても適度なタイミングでプログラムを停止してください。

while true {
    sum += 1
    print("合計: \(sum)")
}

継続条件に固定値としてtrueが入っているので処理を抜けることはありません。

これは単純な例ですが、複雑な条件や処理になると発生してしまうので注意してください。

処理を途中で抜ける

繰り返し処理を行っている中で途中で処理を抜けたいということがたまに発生します。

例えば検索処理などです。
配列の中から見つけたい要素があったら変数に格納し以降の処理は行わない、というように実装したいとします。
その場合breakというものを使い処理ブロックを抜けます。
以下が具体的な実装です。

let fruitsList = ["りんご", "パイナップル", "いちご", "オレンジ", "スイカ"]
var orange = ""

for fruits in fruitsList {
    if fruits == "オレンジ" {
        orange = fruits
        break  // ここでforの処理を抜ける
    }
    print("fruits: \(fruits)")
}

print("検索結果: \(orange)")
fruits: りんご
fruits: パイナップル
fruits: いちご
検索結果: オレンジ

実行結果を見るとprint("fruits: \(fruits)")が「オレンジ」と「スイカ」では実行されていません。
fruitsの値が「オレンジ」になったときにifの処理ブロックに入り、breakforの処理ブロックを抜けたためです。

whileでも同様にbreakを実行すると処理ブロックから抜けることができます。

forとwhileの違い

繰り返し処理という意味ではこの2つに違いはありません。
違いとしてはforは配列など数が決まっているものに対して行う有限の繰り返しに対し、whileは終了条件を満たすまで繰り返される処理ということです。

C言語などではよく使いますが、Swiftではあまりwhile文は見かけません。
ですがが、処理を待ち受けたいときなど使う場面もあります。
通信処理などでたまに使うイメージです。

どちらも使えるようにしておきたいところです。

最後に

今回はSwiftで繰り返し処理を行う方法を紹介しました。
繰り返し処理は条件分岐処理と同様に重要でプログラミングの基礎となる内容なのでこの機会にしっかりと押さえておきましょう。

今回の内容は以上です。

コメント

タイトルとURLをコピーしました