Swift Playground - コードを学ぼう1【for ループ】Part 2

Swift Playground「コードを学ぼう1」で for ループと関数の使い方をマスターしましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

Swift Playground - コードを学ぼう1【for ループ】Part 2

for ループと関数を使いこなそう

プログラミング言語 Swift を楽しく体験できる Swift Playground で、コーディングの基礎を学びましょう。

「コードを学ぼう1」の第3チャプタ「for ループ」のレッスンを、Part 1・Part 2 の2回に分けて解説しています。今回はその Part 2 です。

  • レッスン1〜4:前回の Part 1 で取り上げ、for ループの使い方を練習しました。
  • レッスン5〜7:この記事で解説します。繰り返しのパターンを分解して関数と for ループを作る課題に挑戦しましょう。

for ループの基本的な使い方は実習済みですか? まだの方は Part 1 の記事からご覧ください。

Swift Playground - コードを学ぼう1【for ループ】Part 1
Swift Playground「コードを学ぼう1」で for ループの使い方を学習しましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

レッスンのポイント

今回紹介するレッスン5〜7では、ステージをクリアするためによく出てくる一連の動きを関数にまとめ、それを for ループで繰り返すようコーディングしていきます。

前回の Part 1 で学んだことと関数の復習も兼ねて、レッスンを始める際に知っておきたいポイントを下にまとめました。

  • for ループは、決まった回数や条件で同じことを繰り返すための仕組みです。
  • 回数を指定して繰り返すときは、以下のように書きます。
// forループ(例:5回繰り返す)
for i in 1 ... 5 {

    // 繰り返す処理...

}
  • 関数は、よく使う処理をひとまとめにしたものです。
  • 新しく関数を作るときは、処理内容が分かるように名前をつけて定義します。
  • 関数を使うときは、関数名と括弧を入力して関数を呼び出します。
// 関数を定義する
func 関数の名前() {

    // 一連の処理...

}

// 関数を呼び出す
関数の名前()

今回は for ループのレッスンではありますが、関数の Part 2 で学んだ「分解」という考え方も大事になってきます。大きな問題を一気に解決しようとするのではなく、小さいパーツに分けて考える、というのが分解です。

では、次のセクションからレッスン開始です。Byte を正しく動かすためのコードを書いていきましょう!

※ この記事で紹介しているコードは、あくまで一つの例です(動作確認 Swift Playground 4.7)。プログラミングでは、同じ動きを作る方法がいくつもあります。いろいろなやり方を試しながら、自分なりの答えを見つけてみてください。

レッスン 5「3つの分かれ道」

【目標】

  • 繰り返すパターンを見つける
  • 関数と for 文を作る
Swift Playground/コードを学ぼう1/forループ/3つの分かれ道
Swift Playground/コードを学ぼう1/forループ/3つの分かれ道

課題解決の流れ

1. 繰り返すパターンを見つけよう
このステージには大きな階段が3本あり、マスの数もスイッチの位置も共通しています。繰り返すパターンを見つけ、それを分解して関数を作っていきましょう。

階段を上ったり下りたりする動きは何度も出てくるので、まずは、階段を上るときと下りるときに再利用できる関数を作ります。そしてその後、この関数も組み合わせて階段1本をクリアする関数を作っていきます。

  • 階段を移動する(小さいパターン)
  • 階段1本をクリアする(大きいパターン)

2. 階段を移動する関数を定義しよう
最初に、階段を上り下りする関数です。1本の階段は7マスあります。moveForward() を7つつなげても良いですが、for ループで繰り返すこともできますね。

// 7マス進む
for i in 1 ... 7 {
    moveForward()
}

階段を下りるときも同じく7マス進むので、同じループを繰り返し書かずに済むように、関数にまとめましょう。

  • traverseStairway():トラバース・ステアウェイ「階段を移動する」
// 関数を定義する
func traverseStairway() {

    for i in 1 ... 7 {
        moveForward()
    }

}

3. 階段をクリアする関数を定義しよう
次は、1本の階段をクリアするための関数です。先ほど作った関数も組み合わせながら、階段をクリアするために必要なコマンドを順番に入力してください。

  • clearStairway():クリア・ステアウェイ「階段をクリアする」
// 関数を定義する
func clearStairway() {

    // 階段の下まで進む
    moveForward()
    moveForward()

    // 階段の方を向いて上る
    turnRight()
    traverseStairway()

    // スイッチを切り替えて後ろを向く
    toggleSwitch()
    turnRight()
    turnRight()

    // 階段を下りて右を向く
    traverseStairway()
    turnRight()
}
階段をクリアする
階段をクリアする

4. for ループで繰り返そう
関数を定義できたら、すべての階段をクリアできるよう for ループで繰り返し呼び出します。

// 3回繰り返す
for i in 1 ... 3 {
    clearStairway()
}

5. コードを実行しよう
「コードを実行」を押して動きを確かめましょう。同じ動きを繰り返してスイッチをオンにできたら、ステージクリアです!

// コード正解例

// 階段を移動する関数
func traverseStairway() {
    for i in 1...7 {
        moveForward()
    }
}

// 階段をクリアする関数
func clearStairway() {
    moveForward()
    moveForward()
    turnRight()
    traverseStairway()
    toggleSwitch()
    turnRight()
    turnRight()
    traverseStairway()
    turnRight()
}

// 3本の階段をクリアする
for i in 1 ... 3 {
    clearStairway()
}

レッスン 6「右にも左にも」

【目標】

  • 繰り返すパターンを見つける
  • 関数と for 文を作る
Swift Playground/コードを学ぼう1/forループ/右にも左にも
Swift Playground/コードを学ぼう1/forループ/右にも左にも

課題解決の流れ

1. 繰り返すパターンを見つけよう
このステージには宝石とスイッチが規則的に並んでいます。いっぺんに多くのことを解決しようとするのではなく、まずは小さいパーツに分解し、それらの解決方法を組み合わせて大きな問題を解決できるようにコーディングしていきましょう。

  • 宝石を2つ集める(小さいパターン)
  • スイッチを2つ切り替える(小さいパターン)
  • もとの位置に戻る(小さいパターン)
  • 1列クリアする(大きいパターン)

2. 宝石を集める関数を定義しよう
最初に、宝石を2つ集めるための関数を定義します。「宝石のあるマスへ進み、宝石を取る」という処理を2回実行する関数を作りましょう。

  • collectTwoGems():コレクト・トゥー・ジェム「宝石を2つ集める」
// 関数を定義する
func collectTwoGems() {

    // 宝石のあるマスへ進み、宝石を取る
    moveForward()
    collectGem()

    // 宝石のあるマスへ進み、宝石を取る
    moveForward()
    collectGem()
}

3. スイッチを切り替える関数を定義しよう
次は、スイッチをオンにするための関数です。「スイッチのあるマスへ進み、切り替える」という処理を2回実行する関数を作ってください。

  • toggleTwoSwitches():トグル・トゥー・スイッチ「スイッチを2つ切り替える」
// 関数を定義する
func toggleTwoSwitches() {

    // スイッチのあるマスへ進み、切り替える
    moveForward()
    toggleSwitch()

    // スイッチのあるマスへ進み、切り替える
    moveForward()
    toggleSwitch()
}

4. もとの位置に戻る関数を定義しよう
続いては、もとの位置に戻るための関数です。宝石を集めたあとと、スイッチを切り替えたあとは、向きを変えてもとの位置まで戻ります。「180度回転して、2マス進む」という処理を実行する関数を定義しましょう。

  • turnBack():ターン・バック「戻る」
// 関数を定義する
func turnBack() {

    // 180度回転
    turnLeft()
    turnLeft()

    // 2マス進む
    moveForward()
    moveForward()
}

5. 列をクリアする関数を定義しよう
今度は、より大きい部分を解決する関数を作ります。小さい部分を解決する関数も組み合わせながら、1列クリアするためのコマンドを順番に入力してください。

  • solveRow():ソルブ・ロー「列をクリアする」
// 関数を定義する
func solveRow() {

    // 宝石の方を向いて集めに行く
    turnRight()
    collectTwoGems()

    // 戻ってスイッチを切り替えに行く
    turnBack()
    toggleTwoSwitches()

    // 戻って次の列へ移動する
    turnBack()
    turnLeft()
    moveForward()
}
列をクリアする
列をクリアする

6. for ループで繰り返そう
関数を定義できたら、すべての列をクリアできるよう for ループで繰り返し呼び出します。

// 3回繰り返す
for i in 1 ... 3 {
    solveRow()
}

7. コードを実行しよう
「コードを実行」を押して動きを確かめましょう。同じ動きを繰り返し、宝石を集めてスイッチをオンにできたら、ステージクリアです!

// コード正解例

// 宝石を2つ集める関数
func collectTwoGems() {
    moveForward()
    collectGem()
    moveForward()
    collectGem()
}

// スイッチを2つ切り替える関数
func toggleTwoSwitches() {
    moveForward()
    toggleSwitch()
    moveForward()
    toggleSwitch()
}

// 戻る関数
func turnBack() {
    turnLeft()
    turnLeft()
    moveForward()
    moveForward()
}

// 列をクリアする関数
func solveRow() {
    turnRight()
    collectTwoGems()
    turnBack()
    toggleTwoSwitches()
    turnBack()
    turnLeft()
    moveForward()
}

// 3列クリアする
for i in 1 ... 3 {
    solveRow()
}

レッスン 7「4つの場所に4つの宝石」

【目標】

  • 繰り返すパターンを見つける
  • 関数と for 文を作る
Swift Playground/コードを学ぼう1/forループ/4つの場所に4つの宝石
Swift Playground/コードを学ぼう1/forループ/4つの場所に4つの宝石

課題解決の流れ

1. 繰り返すパターンを見つけよう
for ループのレッスンはこれが最後です。繰り返し出てくる動きのパターンを見つけ、分解して関数を作っていきましょう。

このステージには宝石のまとまっている場所が4ヶ所あります。それぞれの近くにはワープもありますね。アイテムがたくさんあるので少し複雑に見えますが、実際は宝石もワープも同じように並んでいます。

  • 後ろを向く(小さいパターン)
  • 宝石を4つ集める(大きいパターン)

2. 後ろを向く関数を定義しよう
1つのセット(4つの宝石)を集めるために Byte は向きを変えながら移動するので、くるりと180度回転する動きはよく出てきます。まずは、この小さい部分を解決する関数を作っておきましょう。

  • turnAround():ターン・アラウンド「後ろを向く」
// 関数を定義する
func turnAround() {
    turnRight()
    turnRight()
}

3. 宝石を集める関数を定義しよう
次は、4つの宝石を集める関数を作ります。このときに気をつけてほしいのが、宝石を集める順番です。1つのセットを集め終わったらワープで移動するので、無駄な動きをしないで済むような順番で宝石を集めましょう。

  • collectFourGems():コレクト・フォー・ジェム「宝石を4つ集める」
// 関数を定義する
func collectFourGems() {

    // 正面にある宝石を2つ集める
    moveForward()
    collectGem()
    moveForward()
    collectGem()

    // 後ろを向いて1マス戻る
    turnAround()
    moveForward()

    // ワープがない方の宝石を取りに行く
    turnRight()
    moveForward()
    collectGem()

    // 後ろを向いてワープがある方の宝石を取りに行く
    turnAround()
    moveForward()
    moveForward()
    collectGem()

}
宝石を4つ集める
宝石を4つ集める

4. for ループで繰り返そう
ワープで移動しながら宝石を集められるように for ループで繰り返します。

// 3回繰り返す
for i in 1 ... 3 {

    // 宝石を4つ集める
    collectFourGems()

    // ワープに進む
    moveForward()
}

// 最後はワープに進む必要がないので、宝石を集めるだけで終わりにする
collectFourGems()

宝石のセットは4ヶ所にありますが、繰り返すのは3回だということに注意してください。その理由は、3つ目までは次のセットへ移動するために moveForward() でワープのマスへ進みますが、4つ目のセットを集めたあとは進む必要がないからです。

最後のセットを集めるための collectFourGems() は、for ループの外に書いてくださいね。

5. コードを実行しよう
「コードを実行」を押して動きを確かめます。同じ動きを繰り返して宝石を集められたら、ステージクリアです!

// コード正解例

// 後ろを向く関数
func turnAround() {
    turnRight()
    turnRight()
}

// 宝石を4つ集める関数
func collectFourGems() {
    moveForward()
    collectGem()
    moveForward()
    collectGem()
    turnAround()
    moveForward()
    turnRight()
    moveForward()
    collectGem()
    turnAround()
    moveForward()
    moveForward()
    collectGem()
}

// 3セット集める
for i in 1 ... 3 {
    collectFourGems()
    moveForward()
}

// 最後のセットを集める
collectFourGems()

まとめ

今回は、Swift Playground の「コードを学ぼう1」で、関数を作って for ループで繰り返し呼び出す方法を学習しました。ループの使い方だけでなく、新しい関数を作る力もだいぶ鍛えられたのではないでしょうか。

改めて、この記事で紹介しているコードは、あくまで一例です。必ずしも「これだけが正解」というわけではありません。試行錯誤しながら自分なりにコーディングしていくことが、スキルアップへの一番の近道です。焦らず、楽しみながら挑戦してみてください!

最後まで読んでいただき、ありがとうございます。この記事をシェアしてくれると嬉しいです!

SNS で Pyxofy とつながりましょう! LinkedInThreadsBlueskyMastodon X (Twitter) @pyxofyFacebook

関連記事

Scratch - Pyxofy
Scratch 3.0の使い方を、プログラミング初心者や子どもにも分かりやすく紹介しています。
JavaScript - Pyxofy
プログラミング言語のJavaScriptについて、初心者向けに解説しています。
CSS Art
Articles for creating CSS Art.
CSS Animation
Articles for creating CSS Animation.