機能 は、コマンドで複数回実行できる コードのブロック です。イベント に接続したり、0>コールバック0> として割り当てられたりします。
基本機能
機能定義には以下が含まれます:
- 機能の local (グローバルまたは local)。
- The function キーワード。
- 機能の名前は camelCase です。
- 親引数の機能のパラメーター ( () )。
- 関数の「body」、コードのブロック。
- The end キーワード。
機能の実行ボディは、関数を呼び出すと実行されます。関数を呼び出すには、親引き文字を含む名前を入力します。変数を定義して、返却値を受信するか、変数の代わりに返却値を使用することができます。
-- この関数にはパラメータがありません。nil を返します
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- 返しなしの関数を呼び出す
addOneAndTwo() -- 3
パラメータ
パラメーターは、機能に利用可能にする変数であり、機能の 範囲 にのみ使用されます。機能にはパラメーターがデフォルトでありません。如果機能にパラメーターをもっとも使用している場合、Luauは追加のパラメーターを無視します。如果機能にパラメーターを少なくしている場合、Luauは期待
-- この関数には 2つのパラメーターがあります:num1とnum2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- attempt to perform arithmetic (add) on number and nil
戻る
関数のボディで、 return キーワードは、計算からの結果を返します。複数の値を返すことができます。 return は関数の実行を終了し、Luau は end キーワードを 1> return1>
-- この関数は 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
-- この関数は、次の値を返します: sum と difference
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
メソッド
メソッドはオブジェクトのメンバーであるクラス や テーブル などの機能です。 Class や Table などのオブジェクト自体を期待します。 1> self1> を最初の引数として呼び出すと、オブジェクト自体を自動的
Roblox のすべてのオブジェクトは、Instance から派生し、一般的に使用されているメソッドを含む、Instance:Destroy()、Instance:Clone()、および 2>Class.Instance:FindFirstChild()2> などの使用しています。
-- ドット記号でパートを破壊する (機能)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- ワークスペースfirstPart.Destroy(firstPart)print(firstPart.Parent) -- なし-- 「~」記号でパートを破壊する (メソッド)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- ワークスペースsecondPart:Destroy()print(secondPart.Parent) -- nil
メソッドを定義する
テーブルにメソッドを作成するには、メソッドの名前をキーとメソッド関数を値として使用します。メソッドの定義では、 self パラメータはメソッドの親テーブルに参照します。コロン記号を使用してメソッドを呼び出すと、self パラメータが最初の引数と
次の例では、 testButton テーブルに changeEnabled キーの値としてメソッドがあります。 changeEnabled はメソッドの親テーブルを参照するように 8>self.enabled を打印して、1>self1> がメソッドの親テーブルを参照するようにします。
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- はい
-- メソッドを呼び出す
testButton:changeEnabled(false) -- false
コールバック
コールバックは、他の関数またはプロセスに応答して実行される関数です。
基本コールバック
機能は他の機能にパスされ、たとえば、 匿名 機能は、コールバックを実装するために使用されます table.sort() 然後、Players から2> Class.Players.GetPlayers2> にリストをソートするまでを使用します。
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- 名前でプレイヤーをソートするために匿名のコールバックを使用
return a.Name < b.Name
end)
Roblox API では、コールバックは書き込みのみの関数メンバーに参照します。コールバックは、返すまでに生成されます。広く使用されているコールバックには次のものがあります:
- MarketplaceService.ProcessReceipt 、開発者製品の購入を処理します。
- BindableFunction.OnInvoke 、スクリプトが BindableFunction:Invoke(...) を呼び出すと、関数を呼び出します。
- RemoteFunction.OnClientInvoke は、サーバーが RemoteFunction:FireClient(player, ...) または RemoteFunction:FireAllClients(...) を呼び出すときに関数を呼び出します。
- RemoteFunction.OnServerInvoke 、クライアントが RemoteFunction:InvokeServer(...) を呼び出すと、関数を呼び出します。
コールバックを設定するには、関数にそれを割り当てます。たとえば、 BindableFunction.OnInvoke は BindableFunction のコールバックです。
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
機能技術
イベントハンドラー
イベントハンドラーとして知られる関数を、イベントが発動したときに実行するように割り当てることができます。たとえば、 onPlayerAdded() という名前の関数を onPlayerAdded() イベントに作成して、参加するプレイヤーの名前を印刷することができます。詳細は、「イベン
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
匿名関数
名前のない関数を作成し、匿名関数 として、コールバックとイベントハンドラーとして使用できます。名前のある関数と同様、匿名関数は function と en終了 キーワードで始まり、ローカルスコープを指定す
次の例では、task.delay() 関数のコールバックと Players.PlayerAdded イベントハンドラーのコールバックの両方が匿名関数です。
-- タスク.延遅() の非匿名関数
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- イベントハンドラーのアノニマス関数
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
モジュールスクリプトの機能
機能を複数のスクリプト間で再利用するには、ModuleScripts に保存してください。機能は Luau データタイプなので、他のデータと一緒にテーブルに保存できます。
変数関数
変数式関数は、どのような数の引数でも受け入れます。たとえば、 Globals.LuaGlobals.print() は変数式関数です。
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- ケーキは嘘です!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
変数関数を定義する
変数関数を定義するには、... トークンを最後または唯一のパラメータとして使用します(..、concatenation オペレーター と混同しないでください)。2>...2> 値を使用して、簡単に使用できるテーブルに入れることができます。
local function variadic(named, ...)
local arguments = {...} -- 追加の引数をテーブルにパックします
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
-- [[ 結果出力:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
引数の前向き
ラッパーは、他の関数をパスするため、または前に引き出すために変数を定義できます。
local function printAround(functionToPrintAround, ...)
print("Before")
functionToPrintAround(...)
print("After")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
-- [[ 結果出力:
Before
x = 1
y + z = 5
After
]]
配列を使用した変数関数を呼び出す
テーブルの値配列をグローバルな変数関数にパスしたい場合は、print() などのグローバルな関数を使用して、テーブルの値をテーブル自体ではなく、グローバルでパスすることができます。
local squares = {1, 4, 9, 16, 25}print("The first 5 square numbers are:", unpack(squares))-- The first 5 square numbers are 1 4 9 16 25