機能

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

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

基本機能

機能定義には以下が含まれます:

  • 機能の スコープ (グローバルまたは 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 = Workspace
print(firstPart.Parent) -- ワークスペース
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- なし
-- コロンノートでパーツを破壊する (メソッド)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(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 では、コールバックは書き込み専用の機能メンバーを参照し、コールバックは返すまで続行します。広く使用されるコールバックには以下が含まれます:

コールバックを設定するには、それに機能を割り当てます。たとえば、 BindableFunction.OnInvokeBindableFunction のコールバックです。名前の付いたまたは 無名の 機能を設定し、呼び出し ( 呼び出す ) その機能を呼び出すことができます。回答の メソッドを呼び出して。パスした引数は、: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 = 4
print(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