【Lua言語講座】8.関数(1)

関数の1回目 Lua言語講座

こんにちは、ロブスタのハルです!
前回の講座では絶対参照ぜったいさんしょう相対参照そうたいさんしょうについて説明しました。また、パーツの色を変えるプログラムを改良しましたね。
今回はプログラミングをする上で基本となる関数かんすうについて解説します。
前回の講座を見ていない方はこちらからご覧ください。

前回の宿題

  1. 色を変えるプログラム2を子にもつパーツを複製ふくせいしてテストプレイをしてください。このとき、色を変えるプログラム3と比べて何が違うか考えてみましょう。
  2. 以下の画像を基に次の質問に答えてください。
  1. Workapaceの子がどれか答えてください。
  2. Decalの親を答えてください。
  3. TestPartの子を答えてください。
https://roblox-starter.com/programing-lua/lua-lesson7-parent-and-child/

前回の宿題はできましたか?
まず、色を変えるプログラム2と3の違いについてです。2では複製をしても1つのパーツしか色が変わりません。しかし、3だとすべてのパーツの色が変わっていました。つまり相対参照だと同じ変化をさせたいパーツを簡単に複数つくりだせます。逆に絶対参照だとパーツの位置や名前が変わった場合に変更できないこともわかります。

続いて2.の1.はCameraカメラTerrainテレインSpawnLocationスポーンロケーションBaseplateベースプレートTestPartテストパートBlankPartブランクパート、TestPart2がWorkspaceワークスペースの子となっています。
2.の2.ですがDecalデカールの親はSpawnLocationとなっています。また、2.の3.ですがTestPartの子はChangeColorScriptチェンジカラースクリプトです。

エクスプローラ上での子の見分け方としては親の左にある黒い逆三角マークをクリックしてみて表示されたり非表示になるものが子となっています。

関数とは

関数とは一言でいうと次の2つの役割を果たすものです。

  1. 入力→処理→出力をまとめたもの
  2. いくつかの処理をまとめたもの

この2つが同時に成り立っている必要はありません。今回は2.の役割を紹介します。

関数の書き方1

Lua言語では関数を次のようにして宣言せんげんします。

function 関数名(引数)
  処理
  return 戻り値
end

これが基本となる関数の書き方です。処理やreturnリターン文といった関数の中身は必ずインデント(スペースを2つ分空けること)してから書くようにしましょう。
次回くわしく説明しますが、引数とは関数にわたす入力値のことで、戻り値とは関数から渡される出力値のことです。入力値や出力値がない場合は引数やreturn文を書かなくても大丈夫です。また、関数名はローワ―キャメルケースで書かれることが多いです。(命名規則

変数と同じように関数は宣言するだけではダメで使いたい場所で次のように呼び出す必要があります。

関数名(引数)

ただし、関数を呼び出すことができるのは関数を宣言した後です。

関数の書き方2

Lua言語では関数は関数型という変数として扱うことができます。そのため、次のように変数の中に関数を代入することもできます。

変数 = function(引数)
  処理
end

この書き方は匿名関数とくめいかんすう無名関数むめいかんすうと呼ばれ、例えば1度しか使わないような関数を宣言する場合などによく使われます。

いくつかの処理をまとめる役割としての関数

さて、関数の書き方がわかったところで関数の役割の1つである処理をまとめるというものについて説明します。

例として1~5を1行ずつ順番に表示するプログラムを作りたいとします。

print("1")
print("2")
print("3")
print("4")
print("5")

ここまでの知識を使うと上のようなプログラムが書けたかと思います。
では、これを好きなタイミングで何回か使いたいとします。毎回使いたい場所で上のようなコードを書くのは面倒ですよね。そこで関数を使います。

local function printNum()
  print("1")
  print("2")
  print("3")
  print("4")
  print("5")
end

printNum()
print("9999")
printNum()

Roblox Studio上で実行してみてください。一度関数としてまとめてしまえば後は好きなタイミングで呼び出すだけなので便利ですよね。実際に大規模だいきぼなゲームを開発する際にはこのような使い方をすることもあります。

注意点

処理をまとめるという使い方で関数を使う時に注意したいのが機能きのうごとにまとめるようにするということです。例えば、てきを倒したらスコアを計算して表示するというようなスコア処理があったとします。このとき、敵を倒したらスコアを計算して表示するという一連の流れをそのまま関数化したくなりますが、これだとデバッグや変更の際に面倒めんどうなことになってしまいます。こういう場合は敵を倒したことを検知けんちする関数、スコアを計算する関数、スコアを表示する関数のようになるべく小さな機能ごとに関数を作るようにしましょう。

まとめ

  • 関数には入力→処理→出力をまとめる役割と単にいくつかの処理をまとめる役割がある
  • 関数の宣言方法は2種類ある
  • 関数は宣言だけでなく使いたい場所で呼び出す必要がある
  • 関数化するときにはなるべく最小の機能ごとにわける

お疲れ様でした。第8回はここまでです。
次回は入力→処理→出力としての役割を果たす関数について説明します。

コメント

タイトルとURLをコピーしました