コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています!
Day9は「新しい関数を作る」の解説になります。
きましたね〜関数!!
よくエクセルで関数を使ってシートを作成したりしますが、
あれよりも全然かんたんですので安心してください!!
ではやっていきましょう〜
解答例と解説
初めに解答例と解説です!
解答例
先ほど言語化したものを元に、コマンドを当てはめていくと次のようになります。
1〜5行目に注目してください。
ここでturnRight()「右を向く」を定義しています。
少し面倒ではありますが最初に定義してあげることで、
その後の10・12・14行目のturnRight()はラクに入力することができました。
解説
それでは実行した結果がこちらになります。
turnRight()を実行する際には、func turnRight()を参照して
その中身が実行されているのがわかります。
「右を向く」なのに「左を向く」を3回やるのは周りくどいですが、
持っているコマンドだけでクリアするためには現状そうするしかないんですね、、
今回のポイント
関数とは
「一連の作業を行うコマンドを、関数と言う。」と、
Playgroundsの中では紹介されています。
要するにこれまで使ってきたコマンドの、
キャラクターが歩いたり(moveForward())宝石を取ったり(collectGem())が関数だということですね!
前回のDay8でturnLeft()を3回使って右に曲がりましたが、
これが右に曲がる関数(コマンド)を作るということだったんですね。
関数を定義する
関数を定義する方法を解説していきます。
コード入力画面は上のようになっていて、
「コマンドを関数に追加」「タップしてコードを入力」となっている枠にしか入力することができません。
それ以外の欄に書かれている、
「 func turnRight(){ } 」は関数を定義するためにあらかじめ用意されているものです。
ひとつひとつ分解して見ていきましょう!
func
「func」は、コンピュータに「これから関数を定義する(作る)よ」と宣言するようなものと思ってください。
なにもないところにいきなり作りたい関数を書き始めても、
コンピュータに伝わりませんからね(笑)
箱をイメージするとイイかもしれません。
funcで箱を用意して、そこに繰り返し使いたい一連のコマンドを入れていくといった感じでしょうか。
turnRight()
「turnRight()」のturnRightの部分は、自分で好きな名前を入れることができます。
今回は、右に曲がるための関数なのであらかじめturnRightが入っていますが、
これから自分でfuncを定義する時には、入力することができるようになります。
この関数が何をするためのものか、後で見てもわかりやすい名前にしておくことが重要です。
()については、これまでの他のコマンドにも付いていますが、
ここではあまり気にする必要はありません。
()が付いていたらひとつの作業を指示するコマンドなんだなという程度に考えておけば大丈夫です。
{ }
{ }の間には、コマンドを入力します。
例えば、今回の場合は「右を向く」という関数を新たに定義したいので、
turnLeft()を3個入力します。
すると、左回りではありますが、最終的に右を向く関数が完成します!
関数を定義するメリット
ここまで関数の定義の仕方を解説しました。
しかし、「これなら最初からコマンドを入力すればイイんじゃないか?」と考える方もいると思います。
そこで関数を定義するメリットに触れておきます。
- 繰り返し使うことができる
- デバッグの際に見るべき箇所が少なくなる
繰り返し使うことができる
なんといってもこれが一番のメリットではないでしょうか。
直接入力では、例えば右を向かせたい時にその都度turnLeft()を3回入力します。
しかし、funcを使って関数を定義すれば、
定義する際にはturnLeft()を3回入力しますが、
その後はturnRight()1回で済むのです。
コードを入力する中で、一度しか右を向く必要がなければあまり効果を実感できませんが、
2回、3回・・・と入力の回数が増えれば増えるほどfuncが威力を発揮します!!
デバッグの際に見るべき箇所が少なくなる
コードを実行してうまくいかなかった時に、真っ先に見るのがコードです。
関数を定義しておけば、定義したコマンドを使っている場合には、
その定義内容を確認すればイイです。
逆に関数が定義されていなかった場合には、
コマンドの羅列の中からバグを発見しなければならなくなります。
ステージ攻略「新しい関数を作る」
攻略
関数の定義の仕方がわかったところで、実際にコードを入力していきましょう!!
説明文、ステージを確認していきます。
目標は「右に曲がるための関数を定義して、使ってみましょう。」です。
使うことができればクリアになるのかというと、
あくまで目標なのでクリアも目指していきます(笑)
今回は宝石が配置されていないようですね。
その代わりにスイッチが3つ配置されていて、
そのうち2つはスイッチが入っている状態です。
入っていない状態のスイッチを切り替えることができればステージクリアできそうです。
ワープが配置されているので、これを活用するとコマンドが少なくなりそうですね。
クリアまでの道筋を言語化しておくと、
「1マス進む→左を向く→1マス進む→右を向く→1マス進む→右を向く→1マス進む(ワープに入る)→(ワープから出る)右を向く→1マス進む→左を向く→1マス進む→スイッチを切り替える」
になります。
右を向くが3回出てきています。
これはfuncで関数を定義すると効果が期待できるのではないでしょうか!
まとめ
関数を定義することの効果を実感することができたでしょうか?
これからfuncを使うことは多くなります。
複数定義することも出てくるかもしれません。
そうした時に区別しやすいように名前の付け方は工夫したいですね。
- 「func 好きな名前() {一連のコマンド}」で関数を定義することができる
- 1度定義した関数は繰り返し使うことができる
- 関数を定義することで、デバッグが有利になる
次回はDay10「集めて、切り替えて、繰り返す」でお会いしましょう!ではまた!!