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 eksekusi berkali-kali sesuai perintah. Anda juga dapat menghubungkannya dengan peristiwa atau menetapkannya sebagai callback.

Fungsi dasar

Definisi fungsi mencakup:

  • cakupan dari fungsi (global atau local).
  • Kata kunci function.
  • Nama fungsi dalam camelCase.
  • Parameter dari fungsi dalam tanda kurung (()).
  • Blok kode, atau "badan", dari fungsi.
  • Kata kunci end.

Badan dari fungsi dieksekusi ketika Anda memanggil fungsi tersebut. Untuk memanggil fungsi, ketik namanya diikuti dengan tanda kurung. Anda dapat mendefinisikan variabel untuk menerima nilai kembali atau menggunakan nilai kembali sebagai pengganti variabel.


-- Fungsi ini tidak memiliki parameter dan mengembalikan nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Memanggil fungsi tanpa pengembalian
addOneAndTwo() -- 3

Parameter

Parameter adalah variabel yang Anda buat tersedia untuk fungsi dan hanya digunakan dalam cakupan fungsi. Secara default, fungsi tidak memiliki parameter. Jika Anda memanggil fungsi dengan lebih banyak parameter daripada yang diharapkan, Luau mengabaikan parameter tambahan. Jika Anda memanggil fungsi dengan lebih sedikit parameter daripada 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) -- mencoba melakukan aritmetika (penjumlahan) pada angka dan nil

Kembali

Dalam badan fungsi, kata kunci return mengembalikan hasil dari suatu perhitungan. Anda dapat mengembalikan beberapa nilai dari satu fungsi. return mengakhiri eksekusi fungsi, dan Luau mengharapkan kata kunci end diikuti oleh pernyataan return, jadi menulis kode antara perintah return dan perintah end akan menyebabkan kesalahan.


-- 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: jumlah dan selisih
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Memanggil fungsi dan mengharapkan beberapa nilai kembali
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

Metode

Metode adalah fungsi yang merupakan anggota dari suatu objek, seperti kelas atau tabel. Mereka mengharapkan objek itu sendiri (self) sebagai argumen pertama. Ketika Anda memanggil metode, gunakan notasi titik dua (:) alih-alih notasi titik (.) untuk mengirimkan self sebagai argumen pertama secara otomatis.

Semua objek di Roblox diturunkan dari Instance dan memiliki metode yang sering digunakan termasuk Instance:Destroy(), Instance:Clone(), dan Instance:FindFirstChild().


local Workspace = game:GetService("Workspace")
-- Menghancurkan sebuah bagian dengan notasi titik (fungsi)
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspace
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nil
-- Menghancurkan sebuah bagian dengan notasi titik dua (metode)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspace
secondPart:Destroy()
print(secondPart.Parent) -- nil

Mendefinisikan metode

Untuk membuat metode dalam tabel, gunakan nama metode sebagai kunci dan fungsi metode sebagai nilainya. Dalam definisi metode, parameter self merujuk pada tabel induk metode tersebut. Ketika Anda memanggil metode dengan notasi titik dua, Anda mengirimkan tabel itu sendiri sebagai argumen pertama. Anda dapat mendefinisikan parameter untuk metode, tetapi Anda perlu menyebutkannya setelah parameter self.

Dalam contoh berikut, tabel testButton memiliki metode sebagai nilai dari kunci changeEnabled. Anda dapat memverifikasi bahwa self merujuk pada tabel induk metode dengan mencetak nilai dari self.enabled.


local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- true
-- Memanggil metode
testButton:changeEnabled(false) -- false

Callback

Callback adalah fungsi yang dieksekusi sebagai respons terhadap fungsi atau proses lain.

Callback dasar

Fungsi dapat diteruskan ke fungsi lain, misalnya, fungsi anonim dapat digunakan untuk mengimplementasikan sebuah callback yang kemudian digunakan oleh table.sort() untuk mengurutkan daftar dari Players dari Players.GetPlayers().


local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Gunakan callback anonim untuk mengurutkan pemain berdasarkan nama
return a.Name < b.Name
end)

Dalam API Roblox, callback mengacu pada anggota fungsi hanya-tulis, callback menunggu sampai mereka mengembalikan nilai. Callback yang banyak digunakan termasuk:

Untuk menetapkan sebuah callback, tetapkan sebuah fungsi ke dalamnya. Misalnya, BindableFunction.OnInvoke adalah callback dari BindableFunction. Anda dapat mengatur fungsi bernama atau anonim ke dalamnya, dan Anda dapat memanggil (memicu) fungsi tersebut dengan memanggil metode :Invoke() pada callback. Argumen yang Anda kirimkan ke :Invoke() diteruskan ke callback, dan nilai kembali dari fungsi callback kembali kepada pemanggil dari :Invoke().


local bindableFunction = Instance.new("BindableFunction")
bindableFunction.OnInvoke = function(number)
return 2 * number
end
print(bindableFunction:Invoke(42)) -- 84

Teknik fungsi

Penangan acara

Anda dapat menetapkan sebuah fungsi, yang dikenal sebagai penangan acara, untuk dieksekusi ketika sebuah acara terjadi. Misalnya, Anda dapat membuat fungsi bernama onPlayerAdded() untuk acara Players.PlayerAdded untuk mencetak nama pemain yang bergabung. Untuk informasi lebih lanjut, lihat Events.


local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " bergabung dengan permainan!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

Fungsi anonim

Anda dapat membuat fungsi tanpa nama, dikenal sebagai fungsi anonim, untuk digunakan sebagai callback dan penangan acara. Seperti fungsi bernama, fungsi anonim perlu dimulai dan diakhiri dengan kata kunci function dan end, tetapi Anda tidak perlu menggunakan kata kunci local untuk menunjukkan ruang lingkup lokal karena mereka selalu memiliki ruang lingkup lokal.

Dalam contoh berikut, callback untuk fungsi task.delay() dan penangan acara untuk acara Players.PlayerAdded adalah kedua-duanya fungsi anonim.


-- Fungsi anonim dalam callback untuk task.delay()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Fungsi anonim dalam penangan acara
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " bergabung dengan permainan!")
end)

Fungsi dalam skrip modul

Anda dapat menggunakan kembali fungsi di berbagai skrip dengan menyimpannya dalam ModuleScripts. Fungsi adalah tipe data Luau, jadi Anda dapat menyimpannya dalam tabel bersama data lainnya.

Fungsi variadic

Fungsi variadic menerima jumlah argumen yang tidak terbatas. Misalnya, Globals.LuaGlobals.print() adalah fungsi variadic.


print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("The %s is a %s!", "cake", "lie")) -- The cake is a lie!
print(string.char(115, 101, 99, 114, 101, 116)) -- secret

Mendefinisikan fungsi variadic

Untuk mendefinisikan fungsi variadic, Anda menggunakan token ... sebagai parameter terakhir atau satu-satunya (tidak boleh bingung dengan .., operator penggabungan operator). Anda dapat menempatkan nilai ... dalam tabel untuk memudahkan penggunaan.


local function variadic(named, ...)
local arguments = {...} -- kemas argumen tambahan ke dalam tabel
print("Argumen bernama =", named)
for i, value in arguments do
print("Input No.", i, "=", value)
end
end
variadic(10, "Hi", 20, "Fungsi Variadic")
--[[ Keluaran yang dihasilkan:
Argumen bernama = 10
Input No. 1 = Hi
Input No. 2 = 20
Input No. 3 = Fungsi Variadic
]]

Meneruskan argumen

Anda dapat mendefinisikan fungsi variadic sebagai pembungkus di sekitar fungsi lain untuk meneruskan, atau meneruskan, argumen dari pembungkus ke fungsi lain tersebut.


local function printAround(functionToPrintAround, ...)
print("Sebelum")
functionToPrintAround(...)
print("Sesudah")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ Keluaran yang dihasilkan:
Sebelum
x = 1
y + z = 5
Sesudah
]]

Memanggil fungsi variadic dengan array

Jika Anda ingin meneruskan tabel array nilai ke fungsi variadic global, seperti print(), Anda dapat menggunakan fungsi global unpack() untuk meneruskan nilai tabel daripada tabel itu sendiri.


local squares = {1, 4, 9, 16, 25}
print("Lima angka kuadrat pertama adalah:", unpack(squares))
-- Lima angka kuadrat pertama adalah 1 4 9 16 25
©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.