Swift Playground - コードを学ぼう1【条件分岐コード】Part 2

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

Swift Playground - コードを学ぼう1【条件分岐コード】Part 2

条件分岐の書き方をマスターしよう

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

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

  • レッスン1〜4:前回の Part 1 で取り上げ、条件分岐コードの基本と、truefalse について学習しました。
  • レッスン5〜7:この記事で解説します。条件分岐コードを関数やループと組み合わせる練習をしていきましょう。

条件分岐コードの基本的な使い方は実習済みですか?まだの方は Part 1 の記事からご覧ください。

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

レッスンのポイント

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

  • if / else if は、それぞれの条件に応じてやることを分けます。
// 条件分岐コード
if 条件1 {

    // もし条件1を満たすなら、この処理を実行する...

} else if 条件2 {

    // 条件1を満たさず条件2を満たすなら、この処理を実行する...

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

    // 一連の処理...

}

// 関数を呼び出す
関数の名前()
  • for ループは、決まった回数や条件で同じことを繰り返します。
// forループ(例:5回繰り返す)
for i in 1 ... 5 {

    // 繰り返す処理...

}

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

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

レッスン 5「関数をじょうずに使う」

【目標】

  • 関数を定義する
  • if / else if で条件分岐する
Swift Playground/コードを学ぼう1/条件分岐/関数をじょうずに使う
Swift Playground/コードを学ぼう1/条件分岐/関数をじょうずに使う

課題解決の流れ

1. 入力済みのコードを確認しよう
このレッスンでは以下のコードがすでに入力されています。

// 入力済みのコード

func collectOrToggle() {
    // クリックしてコードを入力
}
// クリックしてコードを入力

collectOrToggle() は、宝石を集める、またはスイッチを切り替えるための関数です。{ } の中は空っぽで、まだ定義されていません。

  • collectOrToggle():コレクト・オア・トグル「集めるまたは切り替える」

はじめに「コードを実行」を押してみてください。コードを実行するたびに、宝石・切れているスイッチ・入っているスイッチのいずれかが、特定の場所にランダムに現れます。

2. 関数を定義しよう
collectOrToggle() を定義していきましょう。この関数では、if / else if を使った条件分岐コードで、次の処理を実行します。

  • 宝石の上にいるなら宝石を取る
  • そうではなくて、切れているスイッチの上にいるならスイッチを切り替える
func collectOrToggle() {

    // 宝石を取る、または、スイッチを切り替える
    if isOnGem {
        collectGem()
    } else if isOnClosedSwitch {
        toggleSwitch()
    }

}

3. もう1つ関数を定義しよう
アイテムが出現する場所は決まっています。「2マス進んで、集めるまたは切り替える」を2回繰り返せば1列分をクリアできますね。

1列クリアする
1列クリアする

同じパターンが繰り返されているので、よく使う処理として関数にまとめてしまいましょう。

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

    // 2マス進む
    moveForward()
    moveForward()
    // 集めるまたは切り替える
    collectOrToggle()

    // 2マス進む
    moveForward()
    moveForward()
    // 集めるまたは切り替える
    collectOrToggle()
}

4. 関数を呼び出そう
関数を定義できたら、適切なタイミングで呼び出します。3列クリアできるようにコマンドを入力しましょう。

// 1列目をクリア
solveRow()

// 2列目へ行く
turnLeft()
moveForward()
moveForward()

// 前を向いて2列目をクリア
turnLeft()
solveRow()

// 3列目へ行く
turnRight()
moveForward()

// 前を向いて3列目をクリア
turnRight()
solveRow()

5. コードを実行しよう
「コードを実行」を押して動きを確かめます。宝石または切れているスイッチがあることを確認し、宝石を取ってスイッチをオンにできたらステージクリアです!

// コード正解例

// 集めるまたは切り替える関数
func collectOrToggle() {
    if isOnGem {
        collectGem()
    } else if isOnClosedSwitch {
        toggleSwitch()
    }
}

// 列をクリアする関数
func solveRow() {
    moveForward()
    moveForward()
    collectOrToggle()
    moveForward()
    moveForward()
    collectOrToggle()
}

solveRow() // 1列目クリア
turnLeft()
moveForward()
moveForward()
turnLeft()
solveRow() // 2列目クリア
turnRight()
moveForward()
turnRight()
solveRow() // 3列目クリア

レッスン 6「囲まれる」

【目標】

  • 関数、ループ、条件分岐を組み合わせる
Swift Playground/コードを学ぼう1/条件分岐/囲まれる
Swift Playground/コードを学ぼう1/条件分岐/囲まれる

課題解決の流れ

1. 関数を定義しよう
このステージも、コードを実行するたびに、宝石・切れているスイッチ・入っているスイッチがランダムに現れます。

どのアイテムが現れるのか分からない場合は、1マスごとに何があるのかを調べながら進むといいですね。まずは、宝石があったら集めて、切れているスイッチがあったらオンにする関数を作りましょう。

  • checkTile():チェック・タイル「マスを確認する」
// 関数を定義する
func checkTile() {
    if isOnGem {
        collectGem()
    } else if isOnClosedSwitch {
        toggleSwitch()
    }
}

checkTile() で行う処理は、1つ前のレッスンで作った関数 collectOrToggle() と同じです。collectOrToggle という名前で関数を作っても、もちろん OK です!

2. もう1つ関数を定義しよう
宝石を取ったりスイッチをオンにする以外にも、よく出てくる動きがないか考えてみましょう。Byte の周りにあるマスは一辺の数が同じです。ということは、同じパターンで進んでいけばぐるりと1周できそうですね。

繰り返すパターンは、「真ん中と角のマスをクリアし、曲がって進む」という動きです。

2つのマスをクリアする
2つのマスをクリアする

先ほど定義した checkTile() も使って、繰り返すパターンを関数にまとめましょう。

  • solveTwoTiles():ソルブ・トゥー・タイル「2マスクリアする」
// 関数を定義する
func solveTwoTiles() {

    // 真ん中と角のマスをクリアする
    checkTile()
    moveForward()
    checkTile()

    // 曲がって進む
    turnRight()
    moveForward()
}

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

ただし、先ほど作った関数には、スタート位置から最初のマスへ行く動きは含まれていません。ループの前に必要なコマンドを追加するのを忘れないでくださいね。

// 最初のマスへ進んで右を向く
moveForward()
turnRight()

// 4辺をクリアする
for i in 1 ... 4 {
    solveTwoTiles()
}

4. コードを実行しよう
「コードを実行」を押して動きを確かめましょう。宝石または切れているスイッチがあることを確認し、宝石を取ってスイッチをオンにできたらステージクリアです!

// コード正解例

// マスを確認する関数
func checkTile() {
    if isOnGem {
        collectGem()
    } else if isOnClosedSwitch {
        toggleSwitch()
    }
}

// 2マスクリアする関数
func solveTwoTiles() {
    checkTile()
    moveForward()
    checkTile()
    turnRight()
    moveForward()
}

moveForward()
turnRight()
for i in 1 ... 4 {
    solveTwoTiles()
}

レッスン 7「繰り返しを探す」

【目標】

  • 関数、ループ、条件分岐を組み合わせる
Swift Playground/コードを学ぼう1/条件分岐/繰り返しを探す
Swift Playground/コードを学ぼう1/条件分岐/繰り返しを探す

課題解決の流れ

1. ステージを確認しよう
条件分岐コードのレッスンはこれが最後です。

このステージの宝石とスイッチは決まった位置に現れます。スタート地点からまっすぐの道を進むと、宝石のあるマスの右側には必ず下り階段があり、その先に宝石があります。切れているスイッチの左側には、いつも宝石があります。

一歩ずつ前へ進みながら、宝石があったら右側を、切れているスイッチがあったら左側をクリアしに行く方法を考えましょう。

2. 右側をクリアする関数を定義しよう
最初に、宝石のあるマスに来たらその右側をクリアする関数を作ります。一連の処理を関数にまとめましょう。

  • solveRightSide():ソルブ・ライト・サイド「右側をクリアする」
// 関数を定義する
func solveRightSide() {

    // 宝石を取る
    collectGem()

    // 右側へ進む
    turnRight()
    moveForward()
    moveForward()
    moveForward()

    // 左に曲がる
    turnLeft()
    moveForward()

    // 宝石を取って後ろを向く
    collectGem()
    turnLeft()
    turnLeft()

    // 来た道を戻る
    moveForward()
    turnRight()
    moveForward()
    moveForward()
    moveForward()

    // 前を向く
    turnRight()
}
右側をクリアする
右側をクリアする

3. 左側をクリアする関数を定義しよう
次は、切れているスイッチのマスに来たらその左側をクリアする関数を作ります。一連の処理を関数にまとめましょう。

  • solveLeftSide():ソルブ・レフト・サイド「左側をクリアする」
// 関数を定義する
func solveLeftSide() {

    // スイッチを切り替える
    toggleSwitch()

    // 左側へ進む
    turnLeft()
    moveForward()

    // 宝石を取って後ろを向く
    collectGem()
    turnLeft()
    turnLeft()

    // もとのマスに戻って前を向く
    moveForward()
    turnLeft()
}
左側をクリアする
左側をクリアする

4. 条件分岐しよう
進んだマスに宝石があったら solveRightSide() を、切れているスイッチがあったら solveLeftSide() を呼び出すように、if / else if で条件分岐しましょう。

// 条件分岐コード
if isOnGem { // 宝石の上にいるなら

    // 右側をクリアする
    solveRightSide()

} else if isOnClosedSwitch { // 切れているスイッチの上にいるなら
    
    // 左側をクリアする
    solveLeftSide()

    }
}

5. for ループで繰り返そう
まっすぐの道を1マス進むごとに、宝石があるのか、切れているスイッチがあるのかを確認できるようにします。最後のマスまで同じパターンで進んでいけるよう for ループで繰り返しましょう。

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

    // 前へ進む
    moveForward()

    // 宝石があるか、切れているスイッチがあるかで処理を分ける
    if isOnGem {
        solveRightSide()
    } else if isOnClosedSwitch {
        solveLeftSide()
    }
}

6. コードを実行しよう
「コードを実行」を押して動きを確かめます。宝石または切れているスイッチがあることを確認し、すべての宝石を取ってスイッチをオンにできたらステージクリアです!

// コード正解例

// 右側をクリアする関数
func solveRightSide() {
    collectGem()
    turnRight()
    moveForward()
    moveForward()
    moveForward()
    turnLeft()
    moveForward()
    collectGem()
    turnLeft()
    turnLeft()
    moveForward()
    turnRight()
    moveForward()
    moveForward()
    moveForward()
    turnRight()
}

// 左側をクリアする関数
func solveLeftSide() {
    toggleSwitch()
    turnLeft()
    moveForward()
    collectGem()
    turnLeft()
    turnLeft()
    moveForward()
    turnLeft()
}

for i in 1 ... 5 {
    moveForward()
    if isOnGem {
        solveRightSide()
    } else if isOnClosedSwitch {
        solveLeftSide()
    }
}

まとめ

今回は、Swift Playground の「コードを学ぼう1」で、条件分岐コードを関数やループと組み合わせる課題に取り組みました。

マスの状態に応じて動きを変えるためには条件分岐コードを使います。これまで学んできた関数、ループ、条件分岐を上手に使えば、複雑な問題も整理して解決することができましたね。

ここまでで、「コードを学ぼう1」のチャプタも半分を達成しました!分量の多いコードも書けるようになり、コーディングの力が身についてきていることを実感できているのではないでしょうか。この調子で引き続きスキルアップしていきましょう!

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

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.