Fungsi adalah blok kode yang dapat Anda eksekusikan berkali-kali di perintah. Anda juga dapat menghubungkan mereka ke acara atau menetapkan mereka sebagai 0> panggilan kembali0> .
Fungsi Dasar
Definisi fungsi termasuk:
- scope dari fungsi (global atau local ).
- Kata kunci function .
- Nama fungsi di camelCase .
- Parameter fungsi dalam huruf ( () ).
- Blok kode, atau "tubuh", dari fungsi.
- Kata kunci end.
Tubuh fungsi dieksekusi saat Anda memanggil fungsi. Untuk memanggil fungsi, tulis nama fungsi diikuti oleh tanda-tanda. Anda dapat mendefinisikan variabel untuk menerima nilai kembalian atau menggunakan nilai kembalian sebagai gantian variabel.
-- Fungsi ini tidak memiliki parameter dan kembali nol
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Memanggil fungsi tanpa return
addOneAndTwo() -- 3
Parameter
Parameter adalah variabel yang Anda buat tersedia untuk fungsi dan hanya digunakan dalam scope fungsi. Functions tidak memiliki parameter secara default. Jika Anda memanggil fungsi dengan lebih banyak parameter daripada yang diharapkan, Luau mengabaikan parameter ekstra. Jika Anda memanggil fungsi dengan lebih sedikit parameter daripada yang diharapkan, Luau menyebutkan nil untuk semua parameter yang hilang
-- Fungsi ini memiliki dua parameter: num1 dan 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
Kembali
Dalam tubuh fungsi, return kata kunci mengembalikan hasil dari perhitungan. Anda dapat mengembalikan beberapa nilai dari satu fungsi. return menghasilkan eksekusi fungsi, dan Luau mengharapkan kata kunci end untuk meng
-- Fungsi ini mengembalikan satu nilai kembali
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
-- Fungsi ini mengembalikan beberapa nilai: sum dan difference
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Memanggil fungsi dan mengharapkan beberapa nilai kembalian
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1
Metode
Metode adalah fungsi yang merupakan anggota dari objek, seperti kelas atau tabel. Mereka mengharapkan objek itu sendiri ( self ) sebagai argumen pertama. Saat Anda memanggil metode, gunakan tanda kol ( 2> ) alih dari tanda dot (5> ) untuk sec
Semua objek di Roblox turun dari Instance dan memiliki metode yang paling umum digunakan, termasuk Instance:Destroy() , Instance:Clone() dan 1> Class.Instance:FindFirstChild()1> .
-- Menghancurkan Bagian dengan tanda dot (fungsi)local firstPart = Instance.new("Part")firstPart.Parent = workspaceprint(firstPart.Parent) -- Ruang kerjafirstPart.Destroy(firstPart)print(firstPart.Parent) -- nol-- Menghancurkan Bagian dengan tanda kolom (metode)local secondPart = Instance.new("Part")secondPart.Parent = workspaceprint(secondPart.Parent) -- Ruang kerjasecondPart:Destroy()print(secondPart.Parent) -- nil
Mendefinisikan Metode
Untuk membuat metode di tabel, gunakan nama metode sebagai kunci dan fungsi metode sebagai nilai. Dalam definisi metode, parameter self mengacu pada tabel orang tua. Saat Anda menelepon metode menggunakan tanda seru, Anda melewati tabel itu sendiri sebagai argumen pertama. Anda dapat mendefinisikan parameter untuk metode, tetapi Anda perlu m
Dalam contoh berikut, tabel testButton memiliki metode sebagai nilai dari changeEnabled unit. Anda dapat memverifikasi bahwa self mengacu pada tabel orang tua metode dengan mengecetak nilai dari 2>self.enabled2>.
local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- benar
-- Panggil metode
testButton:changeEnabled(false) -- false
Panggilan
Panggilan adalah fungsi yang dieksekusi dalam menanggapi fungsi atau proses lain.
Panggilan Dasar
Fungsi dapat dilewati ke fungsi lain, misalnya, fungsi anonim dapat digunakan untuk menerapkan panggilan yang table.sort() kemudian menggunakan untuk mengurutkan daftar Players dari 1> Class.Players.GetPlayers()1> .
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Gunakan panggilan anonim untuk mengurutkan pemain berdasarkan nama
return a.Name < b.Name
end)
Dalam API Roblox, panggilan mengacu pada anggota panggilan tunggal, panggilan menghasilkan sampai mereka kembali. Panggilan luas digunakan panggilan termasuk:
- MarketplaceService.ProcessReceipt , yang menangani pembelian produk pengembang.
- BindableFunction.OnInvoke , yang memanggil fungsi saat skrip menyebut BindableFunction:Invoke(...).
- RemoteFunction.OnClientInvoke , yang memanggil fungsi ketika server menelepon RemoteFunction:FireClient(player, ...) atau RemoteFunction:FireAllClients(...) .
- RemoteFunction.OnServerInvoke , yang memanggil fungsi saat klien memanggil RemoteFunction:InvokeServer(...) .
Untuk menetapkan panggilan kembali, atribusikan fungsi kepada itu. Misalnya, BindableFunction.OnInvoke adalah panggilan kembali dari Class.Bindable
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Teknik Fungsional
Penangani Acara
Anda dapat menetapkan fungsi, yang dikenal sebagai penangani acara, untuk dieksekusi saat acara diaktifkan. Misalnya, Anda dapat menciptakan fungsi bernama onPlayerAdded() untuk acara Players.PlayerAdded untuk mencetak nama pemain mana pun yang bergabung. Untuk informasi lebih lanjut, lihat
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Fungsi Anonim
Anda dapat menciptakan fungsi tanpa nama, dikenal sebagai fungsi anonim , untuk digunakan sebagai panggilan dan penangani acara. Seperti fungsi bernama, fungsi anonim perlu dimulai dan diakhiri dengan kata kunci 1> function1> dan <
Dalam contoh berikut, callback untuk fungsi task.delay() dan penangani acara untuk acara Players.PlayerAdded adalah kedua fungsi anonim.
-- Fungsi anonim dalam panggilan untuk task.延迟()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592319444
end)
-- Fungsi anonim dalam penangani acara
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Fungsi di ModuleScripts
Anda dapat menggunakan fungsi yang sama di beberapa skrip dengan menyimpannya di ModuleScripts . Fungsi adalah ketikdata Luau, jadi Anda dapat menyimpannya di tabel dengan data lain.
Fungsi Variadic
Fungsi variadic menerima setiap jumlah argumen. Misalnya, Globals.LuaGlobals.print() adalah fungsi variadic.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- Kue itu berbohong!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Mendefinisikan Fungsi Variadic
Untuk mendefinisikan fungsi variadic, Anda menggunakan token ... sebagai parameter terakhir atau hanya (jangan bingung dengan .. , operasi konjenasi operator). Anda dapat menempatkan nilai 1> ...1> di tabel untuk kemudahan penggunaan.
local function variadic(named, ...)
local arguments = {...} -- kemas argument tambahan ke tabel
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ HasilOutput:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Penghubungan Argument
Anda dapat mendefinisikan fungsi variadic sebagai wraper di sekitar fungsi lain untuk pas, atau maju, argumen dari wraper ke fungsi lain.
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)
--[[ HasilOutput:
Before
x = 1
y + z = 5
After
]]
Memanggil Fungsi Variadic dengan Arrays
Jika Anda ingin melewati tabel lainnya dari nilai ke fungsi global, seperti print() , Anda dapat menggunakan fungsi global unpack() untuk melewati nilai tabel alih-alih tabel itu sendiri.
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