Fungsi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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 = Workspace
print(firstPart.Parent) -- Ruang kerja
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- tidak ada
-- Menghancurkan bagian dengan notasi kolon (metode)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Ruang kerja
secondPart: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:

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 = 4
print(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