関数

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

関数は、コードのブロックであり、コマンドに応じて複数回実行できます。また、イベントに接続したり、コールバックとして割り当てたりすることもできます。

基本的な関数

関数の定義には以下が含まれます:

  • 関数のスコープ:グローバルまたはlocal(再割り当てできないローカル関数のためのconst)。
  • functionキーワード。
  • camelCaseでの関数名。
  • 丸括弧(())内の関数のパラメータ。
  • 関数のコードブロック、または「本体」。
  • endキーワード。

関数の本体は、関数を呼び出すと実行されます。関数を呼び出すには、その名前の後に丸括弧を入力します。戻り値を受け取るための変数を定義するか、変数の代わりに戻り値を使用できます。

-- この関数はパラメータを持たず、nilを返します
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- 戻り値なしで関数を呼び出す
addOneAndTwo() -- 3

パラメータ

パラメータは、関数に利用可能にする変数であり、関数のスコープ内でのみ使用されます。関数にはデフォルトでパラメータはありません。関数を期待されるより多くのパラメータで呼び出すと、Luauは余分なパラメータを無視します。期待されるより少ないパラメータで関数を呼び出すと、Luauはすべての不足しているパラメータにnilを渡します。

-- この関数は2つのパラメータを持ちます:num1とnum2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- 数値とnilの間で算術(加算)を実行しようとしています

戻り値

関数の本体内で、returnキーワードは計算から結果を返します。一つの関数から複数の値を返すことができます。returnは関数の実行を終了し、Luauはreturn文の後にendキーワードが続くことを期待するため、returnコマンドとendコマンドの間にコードを書くとエラーが発生します。

-- この関数は1つの戻り値を返します
local function addNumbers(num1, num2)
local result = num1 + num2
return result
end
print(addNumbers(1, 2)) -- 3
local seven = addNumbers(3, 4)
print(seven) -- 7
-- この関数は複数の値を返します:合計と差
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- 関数を呼び出し、複数の戻り値を期待する
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

メソッド

メソッドは、クラステーブルなどのオブジェクトのメンバーである関数です。メソッドは、最初の引数としてオブジェクト自体(self)を期待します。メソッドを呼び出すときは、コロン表記(:)を使用してselfを最初の引数として自動的に渡します。

RobloxのすべてのオブジェクトはInstanceから派生しており、一般的に使用されるメソッドにはInstance:Destroy()Instance:Clone()、およびInstance:FindFirstChild()が含まれます。

local Workspace = game:GetService("Workspace")
-- ドット表記(関数)でパーツを破壊する
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspace
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nil
-- コロン表記(メソッド)でパーツを破壊する
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspace
secondPart:Destroy()
print(secondPart.Parent) -- nil

メソッドの定義

テーブルにメソッドを作成するには、メソッドの名前をキーとして使用し、メソッド関数を値として使用します。メソッドの定義では、selfパラメータはメソッドの親テーブルを指します。コロン表記を使用してメソッドを呼び出すと、テーブル自体が最初の引数として渡されます。メソッドのためのパラメータを定義できますが、selfパラメータの後にリストする必要があります。

以下の例では、testButtonテーブルにはchangeEnabledキーの値としてメソッドがあります。selfがメソッドの親テーブルを指していることを確認するために、self.enabledの値を印刷できます。

local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- true
-- メソッドを呼び出す
testButton:changeEnabled(false) -- false

コールバック

コールバックは、別の関数やプロセスに応じて実行される関数です。

基本的なコールバック

関数は他の関数に渡すことができ、たとえば、匿名関数を使用してtable.sort()Players.GetPlayers()からのPlayersのリストをソートするためのコールバックを実装できます。

local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- 名前でプレイヤーをソートするための匿名コールバックを使用
return a.Name < b.Name
end)

Roblox APIでは、コールバックは書き込み専用の関数メンバーを指し、コールバックは戻るまで待機します。広く使用されるコールバックには以下が含まれます:

コールバックを設定するには、関数をそれに割り当てます。たとえば、BindableFunction.OnInvokeBindableFunctionのコールバックです。名前付きまたは匿名関数をそれに設定でき、コールバック上で:Invoke()メソッドを呼び出すことでその関数を呼び出すことができます。:Invoke()に渡す引数はコールバックに転送され、コールバック関数からの戻り値は:Invoke()の呼び出し元に戻ります。

local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84

関数のテクニック

イベントハンドラー

イベントが発生したときに実行される関数をイベントハンドラーとして割り当てることができます。たとえば、Players.PlayerAddedイベントにonPlayerAdded()という関数を作成して、参加したプレイヤーの名前を印刷できます。詳細については、イベントを参照してください。

local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. "がゲームに参加しました!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

匿名関数

名前のない関数、すなわち匿名関数を作成して、コールバックイベントハンドラーとして使用できます。名前付き関数と同様に、匿名関数はfunctionendキーワードで始まり、終わる必要がありますが、常にローカルスコープを持つため、ローカルスコープを示すためにlocalキーワードを必要としません。

以下の例では、task.delay()関数のコールバックとPlayers.PlayerAddedイベントのイベントハンドラーの両方が匿名関数です。

-- task.delay()のコールバック内の匿名関数
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- イベントハンドラー内の匿名関数
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. "がゲームに参加しました!")
end)

モジュールスクリプト内の関数

ModuleScriptsに関数を保存することで、複数のスクリプトで関数を再利用できます。関数はLuauのデータ型であるため、他のデータと一緒にテーブルに保存できます。

可変引数関数

可変引数関数は、任意の数の引数を受け取ります。たとえば、Globals.LuaGlobals.print()は可変引数関数です。

print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("その%sは%sです!", "ケーキ", "嘘")) -- そのケーキは嘘です!
print(string.char(115, 101, 99, 114, 101, 116)) -- secret

可変引数関数の定義

可変引数関数を定義するには、最後または唯一のパラメータとして...トークンを使用します(..、連結演算子と混同しないでください)。使いやすさのために、...の値をテーブルに入れることができます。

local function variadic(named, ...)
local arguments = {...} -- 追加の引数をテーブルにパックする
print("名前付き引数 =", named)
for i, value in arguments do
print("入力番号", i, "=", value)
end
end
variadic(10, "こんにちは", 20, "可変引数関数")
--[[ 結果の出力:
名前付き引数 = 10
入力番号 1 = こんにちは
入力番号 2 = 20
入力番号 3 = 可変引数関数
]]

引数の転送

可変引数関数を他の関数のラッパーとして定義して、引数を転送することができます。

local function printAround(functionToPrintAround, ...)
print("前")
functionToPrintAround(...)
print("後")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ 結果の出力:
x = 1
y + z = 5
]]

配列で可変引数関数を呼び出す

print()のようなグローバル可変引数関数に値のテーブル配列を渡したい場合、グローバルunpack()関数を使用して、テーブル自体ではなくテーブルの値を渡すことができます。

local squares = {1, 4, 9, 16, 25}
print("最初の5つの平方数は:", unpack(squares))
-- 最初の5つの平方数は 1 4 9 16 25
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。