[Swift]「ループ」

この記事を読むことで、Swiftのループの基本的な構文や使い方を習得することができます。

ForループWhileループRepeat-Whileループなど、各種ループの具体的な実装方法や活用法を学びます。

目次

ループの基礎

ループはプログラミングにおいて極めて重要な概念です。コードブロックを繰り返し実行する仕組みであり、同じ処理を複数回行うための手段となります。

Swift言語では、主に3つの種類のループが利用できます。この記事では、それらの基本的な構文と使い方について詳しく学んでいきましょう。

Forループ

Forループは、特定の回数だけコードを繰り返し実行するためのループ処理です。

1.基本的な構文

for 初期化; 条件; インクリメント {
    // 実行するコード
}

フォーループでは、3つのステップを組み合わせてループの制御を行います。

  • まず、初期化ではループ変数を初期化します。この変数は、ループの中で使用されるカウンターの役割を果たします。
  • 次に、条件ではループが実行される条件を指定します。条件が満たされている限り、ループが継続されます。
  • 最後に、インクリメントではループ変数を更新する処理を行います。これにより、次のイテレーションに進む際の変数の値が変わります。

イテレーションは、反復的な処理や繰り返し処理を指します。具体的には、ある処理を複数回繰り返し実行することを意味します。例えば、1から10までの数字を順番に処理したり、リストの要素を一つずつ取り出して処理したりする際に、イテレーションを使用します。

2.使用例

使用例
配列
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// Hello, Anna!
// Hello, Alex!
// Hello, Brian!
// Hello, Jack!
  1. let names = ["Anna", "Alex", "Brian", "Jack"]:
    配列 names に4つの文字列要素を定義しています。これらの文字列は名前を表しています。
  2. for name in names { ... }:
    for-in ループを使用して、names 配列内の各要素を順番に name という変数に代入しながら繰り返し処理を行います。
  3. print("Hello, \(name)!"):
    ループ内で各名前に対して、print 関数を使用して “Hello, (name)!” という形式のメッセージを表示します。\(name) の部分は変数 name の値に置き換えられます。これにより、各名前に対するあいさつが表示されます。
使用例
配列+Set
let names: Set = ["Anna", "Alex", "Brian", "Jack", "Jack"]
for name in names {
    print("Hello, \(name)!")
}
// Setがつくと順序が保証されない。同じものは出力されなくなる。 
// Hello, Anna!
// Hello, Jack!
// Hello, Brian!
// Hello, Alex!
  1. let names: Set = ["Anna", "Alex", "Brian", "Jack", "Jack"]:
    names というSetを定義しています。Setは一意の値を保持し、重複する値は削除されます。ここでは “Jack” が2回繰り返されていますが、Set内では重複は自動的に1つにまとめられます。
  2. for name in names { ... }:
    for-in ループを使用して、names セット内の各要素を順番に name という変数に代入しながら繰り返し処理を行います。
  3. print("Hello, \(name)!"):
    ループ内で各名前に対して、print 関数を使用して “Hello, (name)!” という形式のメッセージを表示します。\(name) の部分は変数 name の値に置き換えられます。これにより、セット内の各一意の名前に対するあいさつが表示されます。
使用例
number, 1…5
for number in 1...5 {
    print("Hello, \(number)")
}
// Hello, 1
// Hello, 2
// Hello, 3
// Hello, 4
// Hello, 5
  1. for number in 1...5 { ... }:
    for-in ループを使用して、1から5までの範囲の数字を順番に number という変数に代入しながら繰り返し処理を行います。
  2. print("Hello, \(number)"):
    ループ内で各数字に対して、print 関数を使用して “Hello, (number)” という形式のメッセージを表示します。\(number) の部分は変数 number の値に置き換えられます。これにより、1から5までの数字に対するメッセージが表示されます。
使用例
_ , 1…5
for _ in 1...5 {
    print("Hello")
}
// Hello
// Hello
// Hello
// Hello
// Hello
  1. for _ in 1...5 { ... }:
    for-in ループを使用して、1から5までの範囲を示す 1...5 で指定された回数分だけループ処理を行います。ここで _ は、ループ内で使われる変数の名前が不要であることを示しています。つまり、ループ内のコードは変数を使用しないことを示しています。
  2. print("Hello"): ループ内で、”Hello” というメッセージを表示するために print 関数が使用されています。
使用例
辞書
let contacts = ["Adam": 123456789,
                "James": 987654321,
                "Amy": 912837356]
for person in contacts {
    print(person.key)
    print(person.value)
}
// Adam
// 123456789
// James
// 987654321
// Amy
// 912837356
  1. let contacts = ["Adam": 123456789, ... ]:
    辞書 contacts に3つのキーと値のペアを定義しています。
    キーは名前を、値はそれに対応する電話番号を表しています。
  2. for person in contacts { ... }:
    for-in ループを使用して、contacts 辞書内の各キーと値のペアを順番に person という変数に代入しながら繰り返し処理を行います。
  3. print(person.key): person 変数のキー、つまり名前を表示します。
  4. print(person.value): person 変数の値、つまり電話番号を表示します。
使用例
文字列
let word = "abcde"
 
for letter in word {
    print(letter)
}
// a
// b
// c
// d
// e
  1. let word = "abcde":
    文字列変数 word に文字列 "abcde" を代入しています。これは処理対象となる文字列です。
  2. for letter in word { ... }:
    for-in ループを使用して、文字列 word 内の各文字を順番に letter という変数に代入しながら繰り返し処理を行います。
  3. print(letter):
    ループ内で各文字に対して、print 関数を使用して文字を表示します。

Whileループ

Whileループは、指定した条件が真の間、コードを繰り返し実行するためのループ処理です。条件が偽になると、ループは終了します。

1.基本的な構文

while 条件 {
    // 実行するコード
}

条件が真である限り、ループ内のコードが実行されます。ループの先頭で条件が評価され、真であればループ内のコードが実行されます。実行が終わると再び条件が評価され、繰り返し処理が行われます。条件が偽になるとループは終了します。

whileループは、最終的に条件が偽になることがわかっているが、そのタイミングがわからないときに有用です。

2.使用例

var i = 1

while i <= 5 {
    print(i)
    i += 1
}
  • 変数iを初期値1で初期化し、条件iが5以下の間、ループ内のコードが実行されます。
  • ループ内では、iの値を出力してからiを1ずつ増加させます。
  • ループが実行されるたびにiの値が増え、5までの数値が順番に出力されます。

3.練習問題

指定された桁数の配列としてフィボナッチ数列を出力する関数を作成してください。

fibonacci(n: 5) を呼び出すと、次のように出力されます。
[0, 1, 1, 2, 3]
fibonacci(n: 10) を呼び出すと、次のように出力されます。
[0、1、1、2、3、5、8、13、21、34]

フィボナッチ数列は、前の 2 つの数を加算して作成される一連の数です。
例えば 0、1、1、2、3、5、8、13、21、34 …

Repeat-Whileループ

Repeat-Whileループは、コードブロックをまず一度実行し、その後に条件を評価するループ処理です。条件が真の場合、ループは継続されます。このループは、最低でも一度はコードを実行する必要がある場合に有用です。

1.基本的な構文

repeat {
    // 実行するコード
} while 条件
  • ループ内のコードがまず一度実行され、その後に条件が評価されます。
  • 条件が真である限り、ループは継続されます。条件が偽になると、ループは終了します。

2.使用例

var i = 1

repeat {
    print(i)
    i += 1
} while i <= 5
  • 変数iを初期値1で初期化し、ループ内のコードを実行します。
  • ループ内では、iの値を出力してからiを1ずつ増加させます。
  • その後、条件iが5以下であるかどうかが評価されます。
  • 条件が真の場合、ループは継続され、再びループ内のコードが実行されます。
  • このプロセスがiが5以下である限り繰り返されます。

ループの応用

イテレーションをスキップ

ループ内で特定の条件が満たされた場合にイテレーションをスキップしたい場合は、continue文を使用します。continue文を実行すると、そのイテレーションの残りのコードがスキップされ、次のイテレーションが開始されます。

具体的なコード事例を通じて、スキップの使い方を理解しましょう。

イテレーションをスキップ
for i in 1...5 {
    if i == 3 {
        continue
    }
    print(i)
}
//
  • 1から5までの数字をイテレーションしています。
  • しかし、iが3の場合にはcontinue文が実行され、そのイテレーションの残りのコードがスキップされます。
  • そのため、iが3のときは出力されず、他の数字が順番に出力されます。

ループ全体を中断

また、ループ全体を中断するためには、break文を使用します。break文を実行すると、ループを抜けてループの後の処理に進みます。

以下のコード事例を通じて、中断の使い方を理解しましょう。

ループ全体を中断
var i = 1

while true {
    if i > 5 {
        break
    }
    print(i)
    i += 1
}
  • 無限ループを作成しています(while true)。
  • しかし、iが5を超えると、break文が実行され、ループ全体が中断されます。
  • そのため、1から5までの数字が順番に出力されますが、6以降の数字は出力されません。

ネストされたループ

ネストされたループは、1つのループの中に別のループを組み合わせることで、より複雑な処理を実現するための方法です。

ネストとはある要素が別の要素の中に入れ子になっていることを指します。具体的には、あるコードブロックや要素が別のコードブロックや要素の中に含まれている状態を表します。

以下のコードは、2つのループをネストさせて九九の表を生成する例です。

ネストされたループ:九九の表を生成
for i in 1...9 {
    for j in 1...9 {
        let result = i * j
        print("\(i) × \(j) = \(result)")
    }
}
  • このコードでは、外側のループで変数iが1から9までの値を順番に取ります。
  • 内側のループでは、変数jが1から9までの値を順番に取ります。
  • ループの中で、変数ijを掛け合わせた結果を計算し、九九の表の形式で出力します。

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次