関数とは、スクリプトの中で何度も使用できる命令の集合です。print() や wait() のような既成の関数は、ほとんどのプログラミング言語に組み込まれています。また、独自の関数を作成することもできます。
Luaでは、local function 関数名() という記述で関数を作成することができます。
関数はレシピのようなものと考えることができます。現実の世界では、レシピは一度だけ覚えれば大丈夫です。一度レシピを作成してしまえば、あとは命令するだけで、必要なときにいつでも利用することができます。例えば、ペットロボットに自分の好きな夕食の作り方を命令するのが面倒になったら、手順をリスト化したfunction()を作れが良いわけです。そうすれば、夕食を作りたいとき「ロボットさん,makeSpaghetti()を実行して」と言うだけで済みます。
夕ご飯を作る手順 | 関数 |
---|---|
1. 水を沸騰させる 2. パスタを入れる 3. 15分ゆでる 4. ソースを加える 5. 上に具をのせる 6. 皿に盛り付ける | makeSpaghetti() |
練習として、好きな食べ物をOutputウィンドウに表示する関数を作ります。
スクリプトを設定する
新しいスクリプトを作成する
- ServerScriptService にScriptを入れます。
- スクリプトの名前を FunctionsPractice に変更します。
- “Hello World”を削除します。
- 先頭に説明文(コメント)を入力します。例:– Prints your favorite food
関数を開始させる
すべての関数には、目的が分かるような名前を付けます。ここでは、Outputウィンドウに好きな食べ物を表示する 「printFood()」という名前の新しい関数を作成します。
- local function printFood() と入力します。
名前のつけ方のルール – 関数
関数では camelCase をします。最初のワードの頭文字は小文字で、その後のワードの頭文字は大文字にします。
・例:addPoints()、restartGame()、rainFlamingLlama()
- [Enter] を押すと自動的に「end」を追加されます。
関数にendがあることを確認する
関数に end がないとコードは実行されません。コードが自動的に出ない場合は、自分で end と入力してください。
関数にコードを追加する
関数のコードはすべて、local function printFood() とEndの間に入力する必要があります。関数が実行されても、この2点の間に入っていないコードは実行されません。
print コマンドを入れる
local function printFood()とendの間に、好きな食べ物を表示するprint文を入れます。
関数にインデントを追加する
コードを入力すると自動的にインデントされます。これにより、関数がどこからどこまでか分かりやすくなります。
コードを実行してもまだ何も起こりません。関数を機能させるために、もう1つやることがあります。
関数を呼び出す
スクリプト内での名前で呼び出されない限り関数は実行されません。呼び出されるまでは待機しているということです。関数を呼び出すには、関数の名前を入力し最後に()を付けます。
- Endの下にprintFood()と入力します。
- コードをテストします。好きな食べ物の名前がOutputウィンドウに表示されるはずです。
問題解決のヒント
・好きな食べ物がprintFood()とendの間にあることを確認します。
・食べ物の名前の両サイドにダブルクォーテーションが付いていることを確認します。
・printFood()がendの後に入力されていることを確認します。
コードは次のようになっているはずです。
-- 好きな食べ物を表示
local function printFood()
print("Curry!")
end
printFood()
スコープ内にifコードがあるか確認する
関数の外にあるコードはすべてスコープ外であり、関数が呼び出されても実行されません。スコープ内とするためには、関数のコードはlocal function functionName()とendの間に入っている必要があります。
実際にどうなるのか確認するために、次の実験を行ってみましょう。
- 関数のスコープ外にprint文を作成します。
- 2つ目のprint文の下で、作成した関数を3回呼び出します。
- コードをテストします。関数内のprint文は3回出力されます。関数外のprint文は1回だけ実行されます。
コードがスコープ内に入っていることを確認する
関数を作成するときは、命令文が関数のスコープに含まれていることを確認します。コードがlocal function functionName()とendの外に入力された場合、呼び出されても実行されません。
[ レッスン3 ]
[ 【2】インスタンスとパーティクル ]