#6 Swiftで学ぶループの基本

Swiftのループは、Kotlinと似た「範囲(Range)」を使った書き方が特徴です。この記事では、Swiftにおけるループの基本と、初心者がつまずきやすいポイントを解説します。

forによる繰り返し

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

`0..<5`は「0から5未満まで」、つまり0,1,2,3,4の5回を表します。最後の値を含めたい場合は`0...5`のように、ドットを3つ使う範囲演算子(クローズドレンジ)を使います。この2つの範囲演算子は見た目がとても似ているため、書き間違えると繰り返しの回数が1つずれる「off-by-oneエラー」の原因になります。

配列の中身を処理する

let fruits = ["りんご", "みかん", "ぶどう"] for fruit in fruits { print(fruit) }

インデックス番号も一緒に使いたい場合は、`enumerated()`メソッドが便利です。

for (index, fruit) in fruits.enumerated() { print("\(index): \(fruit)") }

while文

var count = 0 while count < 5 { print(count) count += 1 }

while文は「条件を満たす間、繰り返す」構文です。カウンタ変数(この例では`count`)を更新し忘れると、条件がずっと真のままになり無限ループに陥るので注意しましょう。

一定間隔で繰り返す:stride

2つ飛ばしで繰り返したいなど、間隔を指定したい場合は`stride`関数を使います。

for i in stride(from: 0, to: 10, by: 2) { print(i) }

`stride(from:to:by:)`は終了値を含まず、`stride(from:through:by:)`は終了値を含みます。範囲演算子と同じ考え方です。

ループの制御:break/continue/ラベル

特定の条件でループを抜けたい場合は`break`、その回だけスキップしたい場合は`continue`を使います。さらにSwiftでは、二重ループの外側だけを抜けたい場合に「ラベル付きループ」を使えるのが特徴です。

outerLoop: for i in 0..<3 { for j in 0..<3 { if j == 1 { continue outerLoop } print(i, j) } }

Swiftならではの注意点

`..<`(未満)と`...`(以下)という、見た目がよく似た2つの範囲演算子が存在するのはSwiftの特徴的な部分です。ドットの数の違いだけで意味が変わるため、繰り返し回数の計算ミスにつながりやすい点は特に意識しておきましょう。また、配列の要素を変更しながらループする場合は、`for var`のような書き方はできないため、`indices`を使ってインデックス経由でアクセスする必要があります。

まとめ

Swiftのループは範囲を使った`for`が基本で、`..<`と`...`の違いを正確に覚えておくことが大切です。インデックスが必要な場合は`enumerated()`、間隔を指定したい場合は`stride`、多重ループを抜けたい場合はラベル付きループと、目的に応じた書き方を使い分けられるようになると、より読みやすいコードが書けます。

コメント

このブログの人気の投稿

#11 Rustで学ぶエラーハンドリングの基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本

#19 Goで学ぶテスト(単体テスト)の基本