Roblox(ロブロックス)のゲーム開発のスクリプト言語に使われているLuaスクリプトに関する解説です。
ここではLuaプログラミングの基本となる関数function
の使用について説明しています。
Luaの関数
関数の定義
関数はfunction
~end
を使って定義することができます。
function 関数名()
--処理
end
関数名
に続く()
は後述する引数の記述に使用します。
function hogehoge()
ptint("ほげほげ")
ptint("ふがふが")
ptint("ぴよぴよ")
end
関数の呼び出し
関数は関数名()
で呼び出すことができます。
function hogehoge()
print("ほげほげ")
print("ふがふが")
print("ぴよぴよ")
end
hogehoge() --hogehoge関数を呼び出す
また、関数呼び出しは関数の定義より後でなければいけません。
下記の例はエラー(nilの呼び出し)となります。
hogehoge() --hogehoge関数を呼び出す
function hogehoge()
print("ほげほげ")
print("ふがふが")
print("ぴよぴよ")
end
引数
関数には引数を渡すことができ、これらの値を使って関数内で異なる処理を行うことができます。引数として渡す値はfunction 関数名
に続く()
内に記述します。
function hogehoge(fugapiyo)
print("ほげほげ"..fugapiyo)
end
hogehoge("ふがふが") -->ほげほげふがふが
hogehoge("ぴよぴよ") -->ほげほげぴよぴよ
可変長引数
可変長引数式...
を使うことで、不特定なn個の引数を関数内で受け取ることができます。可変長引数式の...
は引数リストの最後に記述します。
function hogehoge(a, b, ...)
param = {...}
end
function fugafuga(...)
param = {...}
end
戻り値
return
構文を使って、関数の処理結果などを戻り値として元のブロックに返すことができます。
function tashizan(a, b)
return a + b
end
x = tashizan(2, 3) -->5
y = tashizan(1, 7) -->8
複数の戻り値を返す
戻り値はカンマ,
区切りで記述することで、複数の値を指定することができます。
この値を受け取るためには受け取り側に対応する変数が用意されている必要があります。
function hoge()
a = 2
b = 4
return a, b
end
x, y = hoge()
print(x) --> 2 関数hogeのaの値
print(y) --> 4 関数hogeのbの値
匿名関数
関数は関数名
を使用せず、匿名(無名)のものを作ることもできます。
function tashizan(b)
return function (a) --無名関数
return a + b
end
end
Robloxにおいては処理を遅らせるためのdelay
関数や、イベントにより発生する処理など、別の処理の結果が得られた際に呼び出す関数などとして使われます。
delay(2, function(exactTimeElapsed)
print(exactTimeElapsed)
end)
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name.." joined the game!")
end)
匿名関数と変数による関数の扱い
関数は匿名でも使える、という表現は厳密ではなく、本来関数は内部ではすべて匿名で扱われています。そして、関数名
とはこの匿名関数を値として保持する変数の名前です。
function funcname(foo) return foo end
function funcname(foo)
return foo
end
という関数は、下記の変数と全く同一の意味を持ちます。
funcname = function (foo) return foo end
funcname = function (foo)
return foo
end