Fungsi adalah blok kode yang dapat Anda jalankan beberapa kali dengan perintah.Anda juga dapat menghubungkannya ke peristiwa atau menugaskannya sebagai panggil balas.
Fungsi dasar
Definisi fungsi termasuk:
- Lingkup fungsi dari fungsi (global atau local).
- Kata kunci function.
- Nama fungsi di camelCase .
- Parameter fungsi dalam kurungan ( () ).
- Blok kode, atau "tubuh", dari fungsi.
- Kata kunci end.
Tubuh fungsi dieksekusi saat Anda memanggil fungsi.Untuk memanggil fungsi, ketik namanya diikuti oleh tanda kurung.Anda dapat mendefinisikan variabel untuk menerima nilai return atau menggunakan nilai return sebagai gantinya 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 berikan ke fungsi dan hanya digunakan dalam scope fungsi .Fungsi tidak memiliki parameter default.Jika Anda memanggil fungsi dengan lebih banyak parameter daripada yang diharapkan, Luau mengabaikan parameter tambahan.Jika Anda memanggil fungsi dengan parameter lebih sedikit dari yang diharapkan, Luau mengirimkan 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, kata kunci return kembali hasil dari perhitungan.Anda dapat mengembalikan beberapa nilai dari satu fungsi. return mengakhiri eksekusi fungsi, dan Luau mengharapkan kata kunci end untuk mengikuti pernyataan return , jadi menulis kode antara perintah return dan perintah end menyebabkan kesalahan.
-- Fungsi ini mengembalikan satu nilai return
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: jumlah dan perbedaan
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Memanggil fungsi dan mengharapkan beberapa nilai pengembalian
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.Ketika Anda memanggil metode, gunakan notasi kolon ( : ) alih-alih notasi titik ( . ) untuk melewati self sebagai argumen pertama secara otomatis.
Semua objek di Roblox turun dari Instance dan memiliki metode yang umum digunakan termasuk Instance:Destroy() , Instance:Clone() , dan Instance:FindFirstChild() .
local Workspace = game:GetService("Workspace")-- Menghancurkan bagian dengan notasi titik (fungsi)local firstPart = Instance.new("Part")firstPart.Parent = Workspaceprint(firstPart.Parent) -- Ruang kerjafirstPart.Destroy(firstPart)print(firstPart.Parent) -- tidak ada-- Menghancurkan bagian dengan notasi kolon (metode)local secondPart = Instance.new("Part")secondPart.Parent = Workspaceprint(secondPart.Parent) -- Ruang kerjasecondPart:Destroy()print(secondPart.Parent) -- nil
Definisikan metode
Untuk membuat metode di tabel, gunakan nama metode sebagai kunci dan fungsi metode sebagai nilai.Dalam definisi metode, parameter self merujuk ke tabel orangtua metode.Ketika Anda memanggil metode menggunakan notasi kolon, Anda melewati tabel itu sendiri sebagai argumen pertama.Anda dapat mendefinisikan parameter untuk metode, tetapi Anda perlu mencantumkannya setelah parameter self .
Dalam contoh berikut, tabel testButton memiliki metode sebagai nilai kunci changeEnabled.Anda dapat memverifikasi bahwa self merujuk ke tabel orangtua metode dengan mencetak nilai self.enabled.
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 Balik
Panggilan kembali adalah fungsi yang dieksekusi sebagai respons terhadap fungsi atau proses lain.
Panggilan balasan dasar
Fungsi dapat diserahkan ke fungsi lain, misalnya, fungsi anonim dapat digunakan untuk menerapkan panggil balas yang kemudian digunakan untuk mengurutkan daftar dari .
local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Gunakan panggilan balasan anonim untuk mengurutkan pemain berdasarkan nama
return a.Name < b.Name
end)
Di API Roblox, panggilan balik merujuk pada anggota fungsi hanya menulis, panggilan balik diberikan sampai mereka kembali. Panggilan balik yang banyak digunakan termasuk:
- MarketplaceService.ProcessReceipt , yang menangani pembelian produk pengembang.
- BindableFunction.OnInvoke , yang memanggil fungsi ketika skrip memanggil BindableFunction:Invoke(...) .
- RemoteFunction.OnClientInvoke , yang memanggil fungsi ketika server memanggil RemoteFunction:FireClient(player, ...) atau RemoteFunction:FireAllClients(...) .
- RemoteFunction.OnServerInvoke , yang memanggil fungsi saat klien memanggil RemoteFunction:InvokeServer(...) .
Untuk mengatur panggil balik, atribusikan fungsi kepadanya.Sebagai contoh, BindableFunction.OnInvoke adalah panggil balik dari BindableFunction .Anda dapat menetapkan fungsi bernama atau anonim ke dalamnya, dan Anda dapat memanggil ( memanggil ) fungsi itu dengan memanggil metode pada callback.Argumen yang Anda berikan ke :Invoke() ke kembali ke fungsi panggil balasan, dan nilai pengembalian dari fungsi panggil balasan kembali ke pemanggil :Invoke() .
local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84
Teknik fungsi
Pengelola acara
Anda dapat menugaskan fungsi, yang dikenal sebagai penangan acara , untuk dieksekusi saat terjadi acara .Sebagai contoh, Anda dapat membuat fungsi yang disebut onPlayerAdded() ke acara Players.PlayerAdded untuk mencetak nama pemain mana pun yang bergabung.Untuk informasi lebih lanjut, lihat Peristiwa .
local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " joined the game!")
end
Players.PlayerAdded:Connect(onPlayerAdded)
Fungsi tak beridentitas
Anda dapat membuat fungsi tanpa nama, yang dikenal sebagai fungsi anonim , untuk digunakan sebagai panggil balik dan penangani acara .Seperti fungsi bernama, fungsi anonim perlu dimulai dan berakhir dengan kata kunci function dan end, tetapi Anda tidak memerlukan kata kunci local untuk menunjukkan skop lokal karena mereka selalu memiliki skop lokal.
Dalam contoh berikut, callback untuk fungsi task.delay() dan penangani acara untuk acara Players.PlayerAdded adalah kedua fungsi anonim.
-- Fungsi anonim dalam panggilan kembali ke task.delay()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Fungsi anonim di penangan acara
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " joined the game!")
end)
Fungsi dalam skrip modul
Anda dapat menggunakan kembali fungsi di berbagai skrip dengan menyimpannya di ModuleScripts .Fungsi adalah ketikdata Luau, sehingga Anda dapat menyimpannya di tabel dengan data lain.
Fungsi variatif
Fungsi variatif menerima berapa pun argumen. Misalnya, Globals.LuaGlobals.print() adalah fungsi variatif.
print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4print(string.format("The %s is a %s!", "cake", "lie")) -- Kue adalah kebohongan!print(string.char(115, 101, 99, 114, 101, 116)) -- secret
Definisikan fungsi variatif
Untuk mendefinisikan fungsi variatif, Anda menggunakan token sebagai parameter terakhir atau satu-satunya (tidak boleh dikacaukan dengan , operator konkatenasi ).Anda dapat menempatkan nilai ... dalam tabel untuk kemudahan penggunaan.
local function variadic(named, ...)
local arguments = {...} -- paketkan argumen tambahan ke dalam tabel
print("Named argument =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Variadic Function")
--[[ Hasil keluaran:
Named argument = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Variadic Function
]]
Argumen ke depan
Anda dapat mendefinisikan fungsi variatik sebagai penutup di sekitar fungsi lain untuk pasatau mengirimkan argumen dari penutup 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)
--[[ Hasil keluaran:
Before
x = 1
y + z = 5
After
]]
Memanggil fungsi variatif dengan array
Jika Anda ingin mengirimkan array nilai tabel ke fungsi variatik global, seperti print() , Anda dapat menggunakan fungsi global unpack() untuk mengirimkan nilai tabel bukan 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