Fortnite UEFN VERSE

【VERSE】「レッスン 6:関数を定義する」をフォートナイトに例えて解説


初心者

スコープ?条件式?専門用語がおおいな...

よくわからない。誰かわかりやすく教えてください

当サイトでは、フォートナイトに例えて発信しています!

とーや


今回は、スコープや条件式の【レッスン 6:関数を定義する】を解説していきます。


※フォートナイトで例えているので理解するのにも時間は多くかからないように工夫している。


関数シグネチャ


フォートナイトのゲーム内で特定の動きやアクションをする時、ボタンを押すだけで色々なことができる。

それをプログラムの中で実現するための「おまじない」みたいなものが「関数」。

「関数」を作るときには、名前を決めて、何を入力するか、そしてその結果として何が返ってくるかを決める必要がある、これを「関数シグネチャ」といいます。

例えば、キャラクターにダメージを与える関数を考えてみましょう。

関数の名前を「ダメージを与える」とし、入力として「ダメージの量」を受け取り、結果として「残りの体力」を返すという風に設定できます。

そして、関数が実際に「どうやってダメージを計算するか」という部分は、別のところで具体的にプログラムを書く、これが「コード ブロック」と呼ばれる部分です。

要するに、関数は「何をするか」の部分と「どうやってそれをするか」の部分に分かれているということ。

これを覚えれば、もっと自由にゲームを改造したり、新しい機能を追加するのが楽になります。


コード ブロック


コードを書く時、特定の動きやアクションをする部分を「関数」としてまとめることができる。

この「関数」には、実際に何をするかの手順を書く場所があって、それを「コード ブロック」と呼ぶ。

例を考えてみます、ゲーム内でキャラクターがジャンプする動きを作りたいとき、こんな感じで書くことができます。

markdownCopy codeジャンプする() =
    キャラクターを上に動かす
    キャラクターを下に戻す

この例では「ジャンプする」という名前の関数を作って、その中に「キャラクターを上に動かす」と「キャラクターを下に戻す」という2つの手順を書いている、これが「コード ブロック」の部分です。

この「ジャンプする」という関数を使うと、キャラクターはジャンプの動きをする、でもこの関数が実際に動くのは、プログラムの中で「ジャンプする」って指示した時だけ。

そして、ジャンプの動きが終わったら、次に進みます。

要するに、「コード ブロック」は関数の中身、つまり「どうやって動くか」を書く場所。

これを理解すると、もっと自分の思い通りのゲームを作れるようになります。


本体


コードを書く時に「関数」という部分がある。

その関数が実際に何をするのか、その手順や動きの部分を「コード ブロック」と言う、でもこの「コード ブロック」は別の名前も持っていて、「本体」とも呼ばれています。

簡単に言うと、「関数」はゲーム内でキャラクターに何をさせるかの命令の名前みたいなもの。

例えば「ジャンプする」という命令、そして「コード ブロック」や「本体」はその「ジャンプする」という命令が、具体的にどういう動きをするのか、その詳しい手順を書くところ。

「コード ブロック」と「本体」は同じ意味だから、どちらの言葉を使っても大丈夫です。

ゲームを作る時に、キャラクターに何をさせるかの命令をしっかりと書く場所が「本体」となっています。


スコープ


ゲームを作る時、命令や動きを管理する部分が「関数」という名前です。

関数は、ゲーム内でキャラクターがどんなアクションをするか、例えば「ジャンプする」、「歩く」などの動きを教える場所。

「スコープ」という言葉が出てきましたが、これは「どこまでその命令や情報を使えるか」の範囲のことを指します。

例えば、関数の中に「ジャンプの高さ」という設定をしたとする。

この「ジャンプの高さ」が使える場所、つまり「スコープ」がその関数だけだと、他の場所では「ジャンプの高さ」を使うことができません。

この「ジャンプの高さ」のような設定や情報を「変数」と言って、変数を関数の中だけで使う時、それは「ローカル」と呼ばれる。

ローカル変数は、その関数の中だけで使える特別な変数となります。

つまり、スコープとは「情報や命令がどこまで有効か」の範囲を示すもので、それが限られた場所だけで使える時、それを「ローカル」と呼ぶ。

ゲームを作る時に、どこで何の情報を使うかをきちんと決めることが大事になります。


インスタンス化


ゲームの中に「キャラクターが動く」という動きを指示する命令があるとします。

この命令を使って、実際にキャラクターを動かすたびに、その動きを「インスタンス」と言う。

例えば、キャラクターが3回ジャンプすると、それは3つのジャンプの「インスタンス」ができるということ。

「インスタンス化」というのは、その動きを実際にゲームの中で作ること。

つまり、キャラクターにジャンプという動きをさせること自体を「インスタンス化」と呼びます。

この「インスタンス」という言葉は、英語の「instant」から来ていて、サッと瞬間的に起こることを意味する。

それから、「存続期間」っていうのは、そのジャンプの動きがゲームの中でどれくらいの時間続くか、つまり、キャラクターが空中にいる時間のことを指す。

ゲームを作る時に、キャラクターの動きやアクションがどれくらいの時間続くかを考えることは、ゲームが楽しいかどうかを決める大事な部分になってきます。


存続期間


ゲームの中で、特定のアクションや動きをするキャラクターやアイテムがある。

例えば、キャラクターがジャンプする動き。

この動きは始まり(ジャンプを開始する瞬間)から終わり(地面に戻る瞬間)までの時間があります。

これを「存続期間」と言って、その動きがどれくらい続くかを示しているのです。

そして、プログラムの中で使われる「関数」というものがありますが、これは特定の命令を実行するためのもの。

関数の中には「本体」という部分があって、その中で定義されたことだけが実行されるようになっている。

この「本体」の中で使われる情報やデータは、その関数の「スコープ」という範囲内でしか存在しない。

だから、その範囲の外からは関数の中のデータにアクセスすることはできません。

簡単に言うと、ゲームの中の特定のエリアでしか使えないアイテムがあるとすると、そのエリアの外ではそのアイテムを使うことはできないのと同じ、それがプログラムの「スコープ」という考え方だね。


条件式


ゲームの中で、特定のエリアや条件下でしか使えない特別なアイテムや能力がある。

例えば、水中専用の装備や、ある場面でのみ使える特別な武器、これはプログラムの「スコープ」という考え方に似ています。

例として、ゲームの中でプレイヤーがコインを持っていて、それを使ってネズミ捕り器を何個買えるか計算したとする。

でも、その計算は特定の場面、たとえばショップの中でのみ有効でショップの外では、その計算は意味を為しません。

これと同じで、プログラムの中には「if」という条件ブロックがあって、その中で定義されたもの(この場合は「MousetrapsYouCanBuy」)は、そのブロック内でのみ使える。

だから、その外でそれを使おうとすると、「これは何?」というエラーメッセージが出ます。

簡単に言えば、ゲームの中で特定のエリアや場面でしか使えないアイテムや能力と同じように、プログラムも特定の範囲内でのみ有効なものがあるということ。

そして、その範囲を超えると、それらのものはもう存在しない、または使えないということになります。


関数の構文


ゲームの中で特別なアクションや技を使う時、あるボタンを押すと動き出す。

これは実は、プログラムの中の「関数」というものが動いています。

例えば、「関数」を作る時の基本的な書き方はこんな感じ:

markdownCopy code技の名前() : 効果 =
    すること

この「技の名前()」の部分は、技を使うための呼び出し名。

そして「効果」は、その技を使った後の結果や変化を示すもの。

そして、「すること」の部分には、技を使ったときに具体的に何をするかを書きます。

例として、ゲームでコイン500枚を持っていて、ネズミ捕り器を100枚のコインで買うシチュエーションを考えてみてください。

買うときのアクションを「関数」として表すとこんな感じになる:

arduinoCopy code持ってるコイン : 数字 = 500
ネズミ捕り器の価格 : 数字 = 100

ネズミ捕り器を買う() : 結果なし = 
    持ってるコイン = 持ってるコイン - ネズミ捕り器の価格
    画面に表示("ネズミ捕り器を買ったよ!残りのコインは{持ってるコイン}枚だよ。")

このように、関数は特定のアクションを表現するためのもの。

ゲームでキャラクターが動くたび、背後では色々な「関数」が動いている。

関数の名前も大事で例えば、「ネズミ捕り器を買う」という名前はそのアクションが何をするのかすぐに分かります。


void


ゲームの中で、特定のアクションやボタンを押すと、何かが起こることがよくあります。

でも、そのアクションが完了しても特に報酬やアイテムが手に入らないこともある。

そういう時、プログラムの裏側では「void」という特別な単語が使われていることが多いんだ。

「void」は英語で「空っぽ」という意味で、プログラムの世界では「何も返さない」ということを表している。

例えば、ゲームの中でネズミ捕り器を買うアクションを考えてみると、そのアクションを完了した後に特別な報酬がない場合、プログラムはこんな感じになる:

arduinoCopy codeネズミ捕り器を買う() : void = 
    …(アクションの内容)

この「: void」の部分は、このアクション(関数)が完了しても特に何も返さないという意味。

つまり、このアクションを使っても、新しいアイテムやポイントをもらえるわけではありません。

この「void」の概念は、ゲームだけでなく、多くのプログラムやアプリで使われている基本的な考え方。


繰り返しを避ける


ゲームをプレイしていると、同じアクションを何度も繰り返してしまうことがある。

プログラミングでも、同じコードを何度も書いてしまうことは避けたいと考えられていて、この考え方を「DRY:Don't Repeat Yourself(繰り返しを避ける)」と呼びます。

同じことを何度も書くのは面倒だけじゃなく、エラーやバグの原因にもなりやすい。

ゲームで言うと、同じ行動を何度もすると、ミスをする可能性が高くなるようなもの。


例えば、ゲームの中で同じアイテムを何度も作るアクションがあるとして、そのアクションのルールを変えたい場合、全ての場所で変更しなければならない。

そうすると、どこかでミスが発生する可能性が高くなります。

そこで、プログラミングでは「関数」というツールを使うことで、同じコードを何度も書かなくても、簡単に何度も使えるようにすることができる。

これで、修正や変更があった時も、1つの場所だけを変更すれば良くなるので、エラーやバグのリスクを減らせます。

コードを書くときに、大文字と小文字はちゃんと区別されるから注意が必要。

例えば、「Attack」と「attack」は違うものとして認識されるから、ミスをしないようにしましょう。

要するに、ゲームで同じミスを何度も繰り返さないようにするのと同じように、プログラムも同じコードを何度も書かないように気をつけると、より上手なプログラミングができるようになります。


まとめ


今回の記事の要点をまとめさせていただきます。


  • コードブロック(本体)→ 実際に何をするかの手順を書く場所
  • スコープ→ どこまでその命令や情報を使えるかの範囲
  • ローカル変数→ その関数の中だけで使える特別な変数
  • インスタンス化その動きを実際にゲームの中で作ること
  • 存続期間→ 動きがどれくらい続くかを示す時間
  • void→ アクション(関数)が完了しても特に何も返さないこと


今回は、スコープやコードブロックなどの関数を勉強しました。


もし、質問やわからないことがございましたらDMやコメントをお願い致します!


最後までお読みいただきありがとうございました(@^^)/~~~

とーや


-Fortnite, UEFN, VERSE
-, , ,