機能 は、コマンドで複数回実行できる コードブロック です。また、イベント に接続したり、コールバック として割り当てることもできます。
基本機能
機能定義には以下が含まれます:
- 機能の スコープ (グローバルまたは local )。
- 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) -- attempt to perform arithmetic (add) on number and nil
戻る
機能の体内で、return キーワードは計算から結果を返します。1つの関数から複数の値を返すことができます。 は機能の実行を終了し、Luauは キーワードが 文を追跡することを期待しているので、コマンドの間のコードを書くとエラーが発生します。
-- この関数は 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 = 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 キーの値としてメソッドがあります。self がメソッドの親テーブルを参照していることを確認するには、self.enabled の値を印刷します。
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- 真
-- メソッドを呼び出す
testButton:changeEnabled(false) -- false
コールバック
コールバックは、別の機能またはプロセスに対して実行する機能です。
基本的なコールバック
機能は他の機能にパスでき、たとえば、 匿名 機能を使用して、リストをソートするコールバックを実装できます。その後、 に使用されます。
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 のコールバックです。名前の付いたまたは 無名の 機能を設定し、呼び出し ( 呼び出す ) その機能を呼び出すことができます。回答の メソッドを呼び出して。パスした引数は、:Invoke() に前方にコールバックされ、コールバック関数からの返却値は、:Invoke() に呼び出されます。
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
機能技術
イベント処理機
イベントハンドラーとして知られる機能を割り当てて、イベントが発生したときに実行できます。たとえば、onPlayerAdded() という機能を作成して、Players.PlayerAdded イベントに参加するプレイヤーの名前を印刷することができます。詳しくは、イベントを参照してください。
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
アノニム関数
名前のない機能を作成し、 匿名機能 と呼ばれ、コールバック と イベントハンドラー として使用できます。名前付き関数と同様、無名の関数は function および end キーワードで開始および終了する必要がありますが、ローカルスコープを示すために local キーワードは必要ありません、なぜなら彼らは常にローカルスコープを持っているからです。
次の例では、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
変数的機能を定義する
変数機能を定義するには、... トークンを最後または唯一のパラメーターとして使用し、.. オペレーターの結合 オペレーター を混同しないようにします。使いやすさのために、... 値をテーブルに置くことができます。
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() 、グローバル unpack() 機能を使用して、テーブル自体ではなく、テーブルの値をパスできます。
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