Swift Playground - コードを学ぼう1【関数】Part 1

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

Swift Playground - コードを学ぼう1【関数】Part 1

関数の使い方を学ぼう

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

今回紹介するのは、「コードを学ぼう1」の第2チャプタ「関数」です。全部で7つのレッスンを、Part 1・Part 2 の2回に分けて解説していきます。

  • レッスン1〜4:この記事で取り上げます。関数の使い方を練習しましょう。
  • レッスン5〜7:次回の Part 2 で解説し、自分で関数を作ることに慣れていきます。

第1チャプタの「コマンド」は実習済みですか?まだの方は以下の記事からご覧ください。

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

レッスンのポイント

関数は、よく使う処理をひとまとめにして名前をつけたものです。関数にまとめておけば、同じコードを何度も書かずに済み、プログラムがすっきりして読みやすくなります。

  • 新しく関数を作るときは、どのような処理を行うものなのかを明確に示します。これを「関数を定義する」といいます。
  • 関数の定義は、キーワード func(ファンク)を使って下のように書きます。
  • 関数を使うときは、関数の名前と括弧を書きます。これを「関数を呼び出す」といいます。
// 関数を定義する
func 関数の名前() {

    // 一連の処理...

}

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

関数をイメージで理解しよう

関数がどういうものかを分かりやすくするために、日常の場面と照らし合わせてみましょう。

例えば、目玉焼きを作るときには次のようなことをしますよね。

  1. フライパンを温める
  2. 卵を割る
  3. 卵を焼く
  4. 皿に盛り付ける
目玉焼きを作る手順の例
目玉焼きを作る手順の例

目玉焼きを作るたびに1〜4の手順を一つひとつ指示するのは面倒です。関数にまとめてしまえば、「目玉焼きを作る」という一言だけで、この一連の作業が実行されるようになります。

// 例:「目玉焼きを作る」という関数を作る(関数を定義する)
func 目玉焼きを作る() {
    フライパンを温める
    卵を割る
    卵を焼く
    皿に盛り付ける
}

// 実際に目玉焼きを作る(関数を呼び出す)
目玉焼きを作る() // 1つ目
目玉焼きを作る() // 2つ目
目玉焼きを作る() // 3つ目

これまでのレッスンで使ってきた moveForwad()collectGem() なども関数です。あらかじめ、どういう処理を行うのか定義されたものが用意されていて、私たちはそれを呼び出していたのです。

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

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

レッスン 1「新しい挙動を作る」

【目標】

  • これまでに使ったコマンドを組み合わせる
  • 右に曲がれるようにする
Swift Playground/コードを学ぼう1/関数/新しい挙動を作る
Swift Playground/コードを学ぼう1/関数/新しい挙動を作る

課題解決の流れ

1. 向きを変えるマスまで移動しよう
このステージで宝石を取るためには、Byte は右へ曲がる必要があります。まずは、向きを変えるマスまで、まっすぐ前へ進みましょう。

// 3マス進む
moveForward()
moveForward()
moveForward()

2. 右を向く方法を考えよう
これまでのレッスンでは、右を向くコマンドは出てきていません。角を曲がるときはいつも turnLeft() で Byte の向きを左に変えてきました。では、右に曲がりたいときはどうすれば良いでしょうか?

向きを変えるための turnLeft() は、左へ90度回転させるコマンドです。これを3回繰り返せば、くるりと回って右を向くことができますね。

// 3回左を向く = 右を向く
turnLeft()
turnLeft()
turnLeft()
右を向く動き
右を向く動き

3. 宝石を取りに行こう
宝石のある方へ向きが変わったら、宝石を取りに行きましょう。

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

4. コードを実行しよう
「コードを実行」を押して動きを確かめます。右へ曲がって宝石を取れたら、ステージクリアです!

// コード正解例

// 3マス進む
moveForward()
moveForward()
moveForward()
// 右を向く
turnLeft()
turnLeft()
turnLeft()
// 宝石を取りに行く
moveForward()
moveForward()
moveForward()
collectGem()

レッスン 2「新しい関数を作る」

【目標】

  • 関数を作る方法を知る
  • 新しく作った関数を使う
Swift Playground/コードを学ぼう1/関数/新しい関数を作る
Swift Playground/コードを学ぼう1/関数/新しい関数を作る

課題解決の流れ

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

// 入力済みのコード

func turnRight() {
    // コマンドを関数に追加
}
// クリックしてコードを入力

これは新しく関数を作るためのコードです。turnRight という名前で関数を定義する準備がされています。{ } 内の入力欄はインデント(字下げ)されています。理由はコードを読みやすくするためです。

  • turnRight():ターン・ライト「右を向く」

2. 関数を作る目的は?
1つ前のレッスンでは、右に曲がるために turnLeft() を3つ使いましたね。では、何度も右に曲がる角が出てきたらどうでしょう。その度に turnLeft() を3つ書きますか?

プログラムに同じ処理が繰り返し出てくる場合は、その一連の処理に名前をつけて関数としてまとめることができます。

右を向くための関数を作っておけば、右に曲がるときに毎回 turnLeft() を3つ書かずに済むようになるのです。

3. 右を向くための関数を作ろう
{ } の中に右を向くための一連の処理を入力しましょう。

// 右を向く関数を定義する
func turnRight() {
    turnLeft()
    turnLeft()
    turnLeft()
}

以上で、関数 turnRight() を定義できました。

ただし、関数を定義しただけでは何も起こりません。関数を実行するときは、関数の名前と括弧を入力します。これを「関数を呼び出す」といいます。

4. 関数を呼び出そう
では、関数定義の下に続けて、実際に Byte を動かすためのコードを書いていきましょう。

入っているスイッチはそのままでいいので、切れているスイッチを目指して進みます。先ほど作った turnRight() も使いながら、まずはワープまで進んでください。

// ワープまで進む
moveForward()
turnLeft()
moveForward()
turnRight()   // 階段の方を向く
moveForward()
turnRight()   // ワープの方を向く
moveForward()
ワープまで進む
ワープまで進む

5. スイッチを切り替えに行こう
ワープから出たとき、Byte はワープに入ったときと同じ方を向いています。先へ進めるように向きを変えて、スイッチを切り替えに行きましょう。

// スイッチを切り替えに行く
turnRight() // ワープから出た後、右を向く
moveForward()
turnLeft()
moveForward()
toggleSwitch()

6. コードを実行しよう
「コードを実行」を押して動きを確かめます。右へ左へ向きを変えながら進み、切れているスイッチをオンにできたら、ステージクリアです!

// コード正解例

// 右を向く関数
func turnRight() {
    turnLeft()
    turnLeft()
    turnLeft()
}

// ワープまで進む
moveForward()
turnLeft()
moveForward()
turnRight()
moveForward()
turnRight()
moveForward()
// スイッチを切り替えに行く
turnRight()
moveForward()
turnLeft()
moveForward()
toggleSwitch()

レッスン 3「集めて、切り替えて、繰り返す」

【目標】

  • 繰り返すパターンを見つける
  • 名前をつけて関数を定義する
Swift Playground/コードを学ぼう1/関数/集めて、切り替えて、繰り返す
Swift Playground/コードを学ぼう1/関数/集めて、切り替えて、繰り返す

課題解決の流れ

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

// 入力済みのコード

func funcName() {
    // コマンドを関数に追加
}
// クリックしてコードを入力

これは新しく関数を作るためのコードです。funcName(ファンク・ネイム)の部分には、このあと、自分で考えた関数名を入力していきます。

2. 繰り返すパターンを見つけよう
ステージを見て、宝石とスイッチの位置を確認しましょう。一定のパターンが見えてきませんか?

宝石の隣には必ずスイッチがあります。1つ前のレッスンで、「同じ処理が繰り返し出てくる場合は、関数としてまとめると同じコードを何度も書かずに済む」ということを学びましたね。このステージで繰り返し出てくる処理は以下のとおりです。

// 繰り返すパターン
moveForward()
collectGem()
moveForward()
toggleSwitch()
moveForward()
繰り返し出てくる動作
繰り返し出てくる動作

スイッチを切り替えたあと1マス進むところまでが繰り返すパターンです。「角を左に曲がる」は含まれないことに注意してください。Byte は左回りで進んでいきますが、よく見ると、一辺だけマスの数が1つ多いです。そのため、左を向くタイミングは一定ではありません。

3. 新しい関数を作ろう
先ほど見つけた繰り返すパターンを関数にまとめていきましょう。funcName の部分には自分で考えた関数名を入力します。名前をつけるときは、以下のことに気をつけてください。

  • 関数名は、処理の内容が分かるものにする。
  • 関数名に複数の単語を使うときは、2つ目以降の単語の先頭を大文字にする。

今回は、collectGemToggleSwitch という名前をつけて定義します。

  • collectGemToggleSwitch():コレクト・ジェム・トグル・スイッチ「宝石を取ってスイッチを切り替える」
// 宝石を取ってスイッチを切り替える関数を定義する
func collectGemToggleSwitch() {
    moveForward()
    collectGem()
    moveForward()
    toggleSwitch()
    moveForward()
}

4. 関数を呼び出そう
関数を定義できたら、適切なタイミングで関数を呼び出します。宝石を集めてスイッチを切り替えるコードを入力しましょう。

// 全ての宝石を集めてスイッチを切り替える

collectGemToggleSwitch()
turnLeft() // 1つ目の角を曲がる

collectGemToggleSwitch()
moveForward()
turnLeft() // 2つ目の角を曲がる

collectGemToggleSwitch()
turnLeft() // 3つ目の角を曲がる

collectGemToggleSwitch()

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

// コード正解例

// 宝石を取ってスイッチを切り替える関数
func collectGemToggleSwitch() {
    moveForward()
    collectGem()
    moveForward()
    toggleSwitch()
    moveForward()
}

// 全ての宝石を集めてスイッチを切り替える
collectGemToggleSwitch()
turnLeft()
collectGemToggleSwitch()
moveForward()
turnLeft()
collectGemToggleSwitch()
turnLeft()
collectGemToggleSwitch()

レッスン 4「往復する」

【目標】

  • 繰り返すパターンを見つける
  • 名前をつけて関数を定義する
Swift Playground/コードを学ぼう1/関数/往復する
Swift Playground/コードを学ぼう1/関数/往復する

課題解決の流れ

1. 繰り返すパターンを見つけよう
このレッスンでは以下のコードがすでに入力されています。

// 入力済みのコード

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

宝石を集める方法はたくさんありますが、できるだけ効率よくクリアする道順を考えましょう。その中で、関数にまとめられそうな動作はあるでしょうか?「コードを入力したら、実行してみる」を何度か試して、うまく動くパターンを見つけてください。

右回りで宝石を集めて行くことを考えると、「2つ集めて、1マス進んで、右を向く」という動きが繰り返し出てきますね。

2つ集めて1マス進んで右を向く
2つ集めて1マス進んで右を向く

2. 新しい関数を定義しよう
同じ動作を何度も書かずに済むように、関数を作ります。何をする関数なのかが分かるように名前をつけて、定義しましょう。

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

    // 宝石を2つ集める
    collectGem()
    moveForward()
    collectGem()

    // 1マス進んで右を向く
    moveForward()
    turnRight()
}

3. 関数を呼び出そう
関数を定義できたら、適切なタイミングで関数を呼び出します。すべての宝石を集めるためのコードを入力しましょう。

// 全ての宝石を集める
collectTwoGems()
collectTwoGems()
collectTwoGems()
collectGem()
moveForward()
turnRight()
collectTwoGems()

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

// コード正解例

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

// 全ての宝石を集める
collectTwoGems()
collectTwoGems()
collectTwoGems()
collectGem()
moveForward()
turnRight()
collectTwoGems()

まとめ

今回は、Swift Playground の「コードを学ぼう1」で、関数がどういうものかについて学習しました。

関数は、特定の処理をまとめて意味のある名前をつけたものです。プログラムの中で繰り返される処理や複雑な処理を関数としてまとめておくと、必要なときに再利用できるので同じコードを何度も書かずに済み、プログラムが見やすく分かりやすくなります。関数に関連する以下の言葉は覚えておきましょう!

  • 関数を定義する:新しい関数を作ること(関数を作っただけでは何も起こらない)
  • 関数を呼び出す:関数を使うこと(関数名と括弧を入力することで実行される)

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

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

関連記事

スクラッチプログラミング -「ブロックていぎ」とは?じぶんでつくるブロック
プログラミングにつかうブロックを、あたらしくつくってみましょう。Scratchにはたくさんのブロックが用意(ようい)されていますね。でもそれだけでなく、じぶんでブロックをつくることもできますよ。
JavaScript - 関数の基本 - 関数宣言と関数式【初心者向け】
プログラミングをする際、関数の知識は欠かせません。関数を使えば、同じコードを何度も書くことなく特定の処理を実行できるようになります。関数の書き方、パラメータや引数、return 文や戻り値、巻き上げなどの意味を学びましょう。
CSS Art - Radial Gradient Techniques for Realistic Isometric Design - Part 1
Create a mesmerizing multi-colored gumball machine using only CSS! Follow our step-by-step tutorial to design this iconic, eye-catching machine.
CSS Animation – 3D Transforms with scale3d() Function
Scaling and rotating squares to different 3D shapes is eye-catching and fun. Join us and learn scale3d() transforms in this step-by-step article.