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 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 = workspace
print(firstPart.Parent) -- Ruang kerja
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nol
-- Menghancurkan Bagian dengan tanda kolom (metode)
local secondPart = Instance.new("Part")
secondPart.Parent = workspace
print(secondPart.Parent) -- Ruang kerja
secondPart: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:

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