広告

【Roblox開発】Luaの基本:関数の利用

Roblox

Roblox(ロブロックス)のゲーム開発のスクリプト言語に使われているLuaスクリプトに関する解説です。

ここではLuaプログラミングの基本となる関数functionの使用について説明しています。

本コンテンツの内容は、2021年現在Roblox Studioで利用できるLuaスクリプトバージョン5.1.4を基準に記述しています。また、RobloxのLuaには利用できる構文などに違いがあるため、特別な記載がない限りRobloxでの使用における解説を前提に記述しています。

Luaの関数

関数の定義

関数はfunctionendを使って定義することができます。

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

Robloxでは定義前の関数呼び出しは

引数

関数には引数を渡すことができ、これらの値を使って関数内で異なる処理を行うことができます。引数として渡す値は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
タイトルとURLをコピーしました