見出し画像

Lesson 2.6 Loops

おそらく、条件が満たされるまで実行し続ける多くの日常的なタスクを考えることができるでしょう。満杯になるまで水筒を充填し続けるか、課題が完了するまで宿題を続けることができます。

タスクの完了と繰り返しが必要なシナリオは、ループを使用してコードで実行できます。このレッスンでは、Swiftでループを作成し、ループの条件を制御し、停止するタイミングを指定する方法を学びます。

あなたが学ぶこと
・Forループを使用してコレクションの各値をステップスルーする方法
・さまざまな値を反復処理する方法
・条件が真でなくなるまで続くループの書き方

Vocabulary
for loop
for-in loop
while loop

p.180
コンピュータプログラムは物事を繰り返すのに最適です。開発者は、多くの場合、複数のオブジェクトで同じ作業を実行したり、タスクを何度も実行したり、特定の条件が満たされるまで作業を継続したりするためのコードを書きます。Swiftは、コードブロックをループまたは繰り返す3つの異なる方法を提供します。

ループ用

最初に学習するループはforループで、より具体的にはfor-inループとも呼ばれます。Forループは、設定された回数を繰り返したり、値のコレクション全体で作業を実行したりするのに便利です。

For-inループは、範囲、シーケンス、またはコレクション内の各アイテムに対して一連のステートメントを実行します。1から5までの数字の範囲があり、範囲内に各値を印刷したいとします。5つのprint文を書き出すのではなく、範囲を超えて for-inを使用して1つのprint文を書くことができます。構文は次のようになります。

1...5 {のインデックス用

print("This is number \(index)")

}

コンソール出力:

これは1番です

これは2番です

これは3番です

これは4番です

これは5番です

上記のコードでは、インデックスは中括弧内で実行される作業(for-inループ)をカスタマイズするために使用できる定数です。中括弧内のステートメントが初めて実行されるとき、インデックスの値は1で、範囲内の最初の値です。実行が完了すると、インデックスの値は範囲内の次の値である2に更新されます。インデックスが各値に更新されると、print文は5回実行されます。範囲全体が使い果たされた後、ループは完了し、コードはループの後にステートメントに進みます。

p.181 
しかし、結果が範囲内の値を使用する必要がないとしましょう。一連のステップを一定回数実行する方法が必要な場合は、定数に値を割り当てるスキップして、その名前を_に置き換えることができます。

_ in 1...3 {

Print("こんにちは!")

}

コンソール出力:

こんにちは!

こんにちは!

こんにちは!

同じfor-in構文を使用して、配列内の各項目を反復処理できます。

Let names = ["Joseph", "Cathy", "Winston"]

名前の名前{

Print("こんにちは \(名前)")

}

コンソール出力:

こんにちは、ジョセフ

こんにちは、キャシー

こんにちは、ウィンストン

文字列の characters プロパティは個々の文字の配列を返すため、同様の方法で for-in ループを使用できます。

「ABCD」の文字用。文字{

Print("文字は\(文字)")

}
p.182 
コンソール出力:

文字はAです

文字はBです

文字はCです

文字はDです

値に加えて、各要素のインデックスが必要な場合はどうなりますか?配列のenumerated()メソッドを使用して、各項目のインデックスと値の両方を含むタプルを返すことができます。

「ABCD」の(インデックス、文字)用。characters.enumerated() {

Print("\(index): \(letter)")

}

コンソール出力:

0:A

1:B

2:C

3:D

辞書でfor-inループを使用する場合、ループは各エントリのキーと値を保持するタプル(括弧で囲まれた値の順序付きリストを保持できる特別な型)を生成します。辞書は通常、キーを指定することによってアクセスされるため、ループは辞書を介して動作するアイテムの特定の順序を保証するものではありません。

let vehicles = ["unicycle" : 1, "bicycle" : 2, "tricycle" : 3, 
"quad bike" : 4] 
for (vehicleName, wheelCount) in vehicles {
  print("A \(vehicleName) has \(wheelCount) wheels")
}
Console Output:
A unicycle has 1 wheels

p183
自転車には2つの車輪があります
三輪車には3つの車輪があります
クワッドバイクには4つの車輪があります

Whileループ

Whileループは、指定された条件が真でなくなるまでループし続けます。「命」が尽きるまでゲームを続けたいと想像してみてください。ループを続ける条件は、命の数が0より大きいことです。

Var numberOfLives = 3

While numberOfLives > 0 {

playMove()

updateLivesCount()

}

Swiftは、各ループが実行される前に条件をチェックします。つまり、条件が満たされない場合、ループを完全にスキップすることができます。上記の例でnumberOfLivesが0に初期化されていた場合、whileループは0> 0がfalseであると判断し、ループの本文に進むことはありません。

このため、whileループの本文は、最終的に条件を変更する作業を実行する必要があります。以下の例では、numberOfLivesの値を更新するものは何もないので、条件は常にtrueに解決され、永遠に続きます。

Var numberOfLives = 3

While numberOfLives > 0 {

print("私はまだ\(numberOfLives)の命を持っています。")

}
p.184
代わりに、本文は、ある時点で誤った状態になるステートメントを実行する必要があります。

Var numberOfLives = 3

Var stillAlive = true

まだ生きている間 {

numberOfLives -= 1

If numberOfLives == 0 {

stillAlive = false

}

}

転送ステートメントの制御

ループの本文内からループの実行を停止したい場合があります。Swiftキーワードブレークは、ループ内のコード実行を中断し、ループの後に定義されたコードの実行を開始します。

以下のコードでは、カウンタが0に達するとループが壊れます。

//-3から0まで印刷

-3...3 {のカウンター用

印刷(カウンター)

カウンターの場合 == 0 {

ブレーク

}

}

コンソール出力:

-3
-2
-1
0

p.185コンピュータは、要求された何度でもタスクを実行するのが非常に得意です。コレクションを反復処理する必要がある場合でも、条件が満たされるまで一連のステップを繰り返す必要がある場合でも、ループはよく理解するための重要な概念です。プログラミングのキャリアを通じて頻繁に使用します。

この記事が気に入ったらサポートをしてみませんか?