Swift Playground - コードを学ぼう1【コマンド】Part 2

Swift Playground「コードを学ぼう1」でデバッグに挑戦してみましょう。本記事ではプログラミング初心者にも分かりやすいように解説し、コードの正解例を掲載しています。

Swift Playground - コードを学ぼう1【コマンド】Part 2

デバッグに挑戦しよう

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

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

  • レッスン1〜4:前回の Part 1 で取り上げ、コマンドを組み合わせて Byte を動かす課題に取り組みました。
  • レッスン5〜7:この記事で解説します。バグを見つけてデバッグする練習をしていきましょう。

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

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

レッスンのポイント

レッスンを始める際に知っておきたいポイントを下にまとめました。

  • バグとは、プログラムが思い通りに動かない原因となる間違いのことです。
  • デバッグとは、正しく動かなくなる原因のバグを見つけて直すことです。
不具合を見つけて修正する
不具合を見つけて修正する

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

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

レッスン 5「バグを見つけて直す」

【目標】

  • バグ、デバッグの意味を知る
  • デバッグを行い Byte を正しく動かす
Swift Playground/コードを学ぼう1/コマンド/バグを見つけて直す
Swift Playground/コードを学ぼう1/コマンド/バグを見つけて直す

課題解決の流れ

1. コードを実行しよう
このレッスンでは、コードがすでに入力されています。まずは「コードを実行」を押して、Byte の動きを確認しましょう。

// 入力済みのコード

moveForward()
turnLeft()
moveForward()
moveForward()
collectGem()
moveForward()
toggleSwitch()

このステージには宝石とスイッチがありますが、Byte は宝石にもスイッチにも到達しません。つまり、このコードにはバグがある、ということです。

バグのある動き
バグのある動き

2. 間違いを確認しよう
宝石とスイッチへ行き着くためには、2マス進んでから左に曲がります。今のコードだと、turnLeft() が2行目に書いてあるので、左に向くタイミングが早すぎですね。

入力済みのコードはコマンドの「順序」に問題がある、ということが分かりました。

moveForward()

// バグ
turnLeft()
moveForward()

moveForward()
collectGem()
moveForward()
toggleSwitch()

3. デバッグしよう
バグの原因を修正しましょう。

moveForward() を2回実行してから左に向くよう、turnLeft() を3行目に入力し直してください。または、turnLeft() を選択してドラッグ & ドロップで簡単に移動することもできます。

コマンドの位置を修正する
コマンドの位置を修正する

4. コードを実行しよう
もう一度「コードを実行」を押して動きを確かめましょう。正しい位置で左に曲がり、宝石を取ってスイッチを切り替えられたら、デバッグ成功です!

// デバッグしたコード

moveForward()
moveForward()
turnLeft()
moveForward()
collectGem()
moveForward()
toggleSwitch()

レッスン 6「バグつぶしの練習」

【目標】

  • 複数のバグを見つける
  • デバッグする
Swift Playground/コードを学ぼう1/コマンド/バグつぶしの練習
Swift Playground/コードを学ぼう1/コマンド/バグつぶしの練習

課題解決の流れ

1. コードを実行しよう
このレッスンも、コードがすでに入力されています。「コードを実行」を押して、Byte の動きを確認しましょう。

// 入力済みのコード

moveForward()
moveForward()
moveForward()
turnLeft()
toggleSwitch()
moveForward()
moveForward()
moveForward()
collectGem()
moveForward()

1つ前のレッスンではバグが1箇所だけでしたが、今回のコードにはバグが複数あります。

バグのある動き
バグのある動き

2. 切れているスイッチをオンにしよう
入っているスイッチを切り替える必要はないので、オフになっているスイッチを目指して進みましょう。ステージ中央あたりにある切れているスイッチへ行くためには、1マス進んだあとに向きを左に変えます。

【デバッグ方法】
moveForward() を1回実行してから左を向くよう、4行目にある turnLeft() を2行目に修正してください。

moveForward()
turnLeft() // 左を向く
moveForward()
moveForward()

toggleSwitch()
moveForward()
moveForward()
moveForward()
collectGem()
moveForward()

3. 宝石を取りに行こう
スイッチを切り替えたあとは、ワープを使って宝石を取りに行きましょう。スイッチからワープまでは2マス、ワープから出たあとは宝石まで2マス進みます。

【デバッグ方法】
moveForward() を4回実行してから宝石を取るよう、collectGem() を1番下へ修正してください。

moveForward()
turnLeft()
moveForward()
moveForward()
toggleSwitch()
moveForward()
moveForward()
moveForward()

moveForward()
collectGem() // 宝石を取る

4. コードを実行しよう
もう一度「コードを実行」を押して動きを確かめましょう。切れているスイッチをオンにして宝石を取れたら、デバッグ成功です!

// デバッグしたコード

// 切れているスイッチを入れに行く
moveForward()
turnLeft()
moveForward()
moveForward()
toggleSwitch()
// 宝石を取りに行く
moveForward()
moveForward()
moveForward()
moveForward()
collectGem()

レッスン 7「最短の道順」

【目標】

  • 最小コマンド数でクリアする方法を考える
Swift Playground/コードを学ぼう1/コマンド/最短の道順
Swift Playground/コードを学ぼう1/コマンド/最短の道順

課題解決の流れ

1. ステージを確認しよう
コマンドのレッスンはこれが最後です。宝石を取ってスイッチをオンにできる最短の道順を考えましょう。

緑のワープを使えばまっすぐ進むだけでクリアできそうだ、ということが分かりますね。

最短の道順
最短の道順

参考までに、宝石を取ってスイッチをオンにする道順はほかにもあります。近くにある青いワープから入っていく道順です。この方法でもステージはクリアできますが、最短の道順を選ぶという今回の課題には適していません。

最短ではない道順
最短ではない道順

2. コードを入力しよう
最短の道順でクリアできるようコーディングしましょう。マスの数を数えて、宝石を取るタイミングやスイッチを切り替えるタイミングを間違えないように、コマンドを組み合わせてください。

// 宝石を取りに行く
moveForward()
moveForward()
moveForward()
collectGem()

// 緑のワープまで進む
moveForward()
moveForward()

// 切れているスイッチを入れに行く
moveForward()
moveForward()
toggleSwitch()

もし正しく動かなくても、何度でもやり直すことができます。コマンドを入力したら試しにコードを実行してみて、使用するコマンドや順序にバグがないか確認してみてくださいね。

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

このレッスンでは、できるだけ少ないコマンド数で目的を達成する、ということを学びました。このようなコーディングを心がけると、コードがすっきりして読みやすくなり、バグを防ぐことにもつながります。

// コード正解例

// 緑のワープまで進む
moveForward()
moveForward()
moveForward()
collectGem()
moveForward()
moveForward()
// 切れているスイッチを入れに行く
moveForward()
moveForward()
toggleSwitch()

まとめ

今回は、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.