Hàm

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Hàmcác đoạn mã mà bạn có thể thực thi nhiều lần theo lệnh. Bạn cũng có thể kết nối chúng với các sự kiện hoặc gán chúng như là callback.

Hàm cơ bản

Một định nghĩa hàm bao gồm:

  • Phạm vi của hàm (toàn cục hoặc local).
  • Từ khóa function.
  • Tên của hàm theo định dạng camelCase.
  • Các tham số của hàm trong dấu ngoặc đơn (()).
  • Đoạn mã, hoặc "thân", của hàm.
  • Từ khóa end.

Thân hàm sẽ thực thi khi bạn gọi hàm. Để gọi một hàm, hãy gõ tên của nó theo sau là dấu ngoặc đơn. Bạn có thể định nghĩa một biến để nhận giá trị trả về hoặc sử dụng giá trị trả về thay cho một biến.


-- Hàm này không có tham số và trả về nil
local function addOneAndTwo()
local result = 1 + 2
print(result)
end
-- Gọi một hàm mà không có giá trị trả về
addOneAndTwo() -- 3

Tham số

Tham số là các biến mà bạn cung cấp cho hàm và chỉ được sử dụng trong phạm vi của hàm. Hàm không có tham số theo mặc định. Nếu bạn gọi một hàm với nhiều tham số hơn mức nó mong đợi, Luau sẽ bỏ qua các tham số thêm. Nếu bạn gọi một hàm với ít tham số hơn mức nó mong đợi, Luau sẽ cung cấp nil cho tất cả các tham số bị thiếu.


-- Hàm này có hai tham số: num1 và num2
local function addNumbers(num1, num2)
print(num1 + num2)
end
addNumbers(2, 3) -- 5
addNumbers(5, 6, 7) -- 11
addNumbers(9) -- cố gắng thực hiện phép toán (cộng) trên số và nil

Trả về

Trong thân hàm, từ khóa return sẽ trả về một kết quả từ một phép toán. Bạn có thể trả về nhiều giá trị từ một hàm. return kết thúc việc thực thi hàm, và Luau mong đợi từ khóa end sẽ theo sau các câu lệnh return, vì vậy viết mã giữa câu lệnh return và câu lệnh end sẽ gây ra lỗi.


-- Hàm này trả về một giá trị
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
-- Hàm này trả về nhiều giá trị: tổng và hiệu
local function addAndSubtract(num1, num2)
local sum = num1 + num2
local difference = num1 - num2
return sum, difference
end
-- Gọi một hàm và mong đợi nhiều giá trị trả về
local sum, difference = addAndSubtract(2, 3)
print(sum) -- 5
print(difference) -- -1

Phương thức

Phương thức là các hàm là thành viên của một đối tượng, chẳng hạn như một class hoặc table. Chúng mong đợi đối tượng chính nó (self) như là tham số đầu tiên. Khi bạn gọi một phương thức, hãy sử dụng ký hiệu dấu hai chấm (:) thay vì ký hiệu dấu chấm (.) để tự động truyền self như tham số đầu tiên.

Tất cả các đối tượng trong Roblox đều xuất phát từ Instance và có các phương thức thường dùng như Instance:Destroy(), Instance:Clone(), và Instance:FindFirstChild().


local Workspace = game:GetService("Workspace")
-- Xóa một phần với ký hiệu dấu chấm (hàm)
local firstPart = Instance.new("Part")
firstPart.Parent = Workspace
print(firstPart.Parent) -- Workspace
firstPart.Destroy(firstPart)
print(firstPart.Parent) -- nil
-- Xóa một phần với ký hiệu dấu hai chấm (phương thức)
local secondPart = Instance.new("Part")
secondPart.Parent = Workspace
print(secondPart.Parent) -- Workspace
secondPart:Destroy()
print(secondPart.Parent) -- nil

Định nghĩa phương thức

Để tạo một phương thức trong một bảng, hãy sử dụng tên của phương thức như là khóa và hàm phương thức như là giá trị. Trong định nghĩa của phương thức, tham số self tham chiếu đến bảng cha của phương thức. Khi bạn gọi một phương thức bằng ký hiệu dấu hai chấm, bạn truyền bảng chính nó như là tham số đầu tiên. Bạn có thể định nghĩa các tham số cho một phương thức, nhưng cần liệt kê chúng sau tham số self.

Trong ví dụ sau, bảng testButton có một phương thức như là giá trị của khóa changeEnabled. Bạn có thể xác nhận rằng self tham chiếu đến bảng cha của phương thức bằng cách in giá trị của self.enabled.


local testButton = {
enabled = true,
changeEnabled = function(self, isEnabled)
self.enabled = isEnabled
print(self.enabled)
end
}
print(testButton.enabled) -- true
-- Gọi phương thức
testButton:changeEnabled(false) -- false

Callback

Callback là các hàm thực thi để đáp ứng với một hàm hoặc quy trình khác.

Callback cơ bản

Các hàm có thể được truyền vào các hàm khác, ví dụ, một hàm vô danh có thể được sử dụng để triển khai một callback mà table.sort() sau đó sử dụng để sắp xếp một danh sách các Players từ Players.GetPlayers().


local Players = game:GetService("Players")
local sortedPlayers = Players:GetPlayers()
table.sort(sortedPlayers, function(a, b)
-- Sử dụng một callback vô danh để sắp xếp người chơi theo tên
return a.Name < b.Name
end)

Trong API của Roblox, callback đề cập đến một thành viên hàm chỉ ghi, callback sẽ chờ cho đến khi chúng trả về. Các callback được sử dụng rộng rãi bao gồm:

Để thiết lập một callback, gán một hàm cho nó. Ví dụ, BindableFunction.OnInvoke là một callback của BindableFunction. Bạn có thể gán một hàm có tên hoặc vô danh cho nó, và bạn có thể gọi (invoke) hàm đó bằng cách gọi phương thức :Invoke() trên callback. Các tham số bạn truyền vào :Invoke() sẽ được chuyển tiếp đến callback, và giá trị trả về từ hàm callback sẽ trả về cho người gọi :Invoke().


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

Kỹ thuật hàm

Trình xử lý sự kiện

Bạn có thể gán một hàm, được gọi là trình xử lý sự kiện, để thực thi khi một sự kiện xảy ra. Ví dụ, bạn có thể tạo một hàm gọi là onPlayerAdded() cho sự kiện Players.PlayerAdded để in tên của bất kỳ người chơi nào tham gia. Để biết thêm thông tin, hãy xem Sự kiện.


local Players = game:GetService("Players")
local function onPlayerAdded(player)
print(player.Name .. " đã tham gia trò chơi!")
end
Players.PlayerAdded:Connect(onPlayerAdded)

Hàm vô danh

Bạn có thể tạo các hàm không có tên, được gọi là hàm vô danh, để sử dụng làm callbacktrình xử lý sự kiện. Giống như các hàm có tên, hàm vô danh cần bắt đầu và kết thúc bằng từ khóa functionend, nhưng bạn không cần từ khóa local để chỉ định phạm vi cục bộ vì chúng luôn có phạm vi cục bộ.

Trong ví dụ sau, callback cho hàm task.delay() và trình xử lý sự kiện cho sự kiện Players.PlayerAdded đều là các hàm vô danh.


-- Hàm vô danh trong callback cho task.delay()
task.delay(2, function(exactTimeElapsed)
print(exactTimeElapsed) -- 2.0064592329945
end)
-- Hàm vô danh trong trình xử lý sự kiện
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
print(player.Name .. " đã tham gia trò chơi!")
end)

Hàm trong script mô-đun

Bạn có thể tái sử dụng các hàm qua nhiều script bằng cách lưu chúng trong ModuleScripts. Các hàm là một loại dữ liệu của Luau, vì vậy bạn có thể lưu chúng trong bảng với các dữ liệu khác.

Hàm biến số

Một hàm biến số chấp nhận bất kỳ số lượng tham số nào. Ví dụ, Globals.LuaGlobals.print() là một hàm biến số.


print(2, "+", 2, "=", 2 + 2) --2 + 2 = 4
print(string.format("Cái %s là một %s!", "bánh", "dối")) -- Cái bánh là một dối!
print(string.char(115, 101, 99, 114, 101, 116)) -- bí mật

Định nghĩa hàm biến số

Để định nghĩa một hàm biến số, bạn sử dụng token ... như tham số cuối cùng hoặc duy nhất (không nên nhầm lẫn với .., toán tử nối operator). Bạn có thể đặt các giá trị ... vào trong một bảng để dễ sử dụng.


local function variadic(named, ...)
local arguments = {...} -- đóng gói các tham số thêm vào trong một bảng
print("Tham số đã đặt tên =", named)
for i, value in arguments do
print("Đầu vào số.", i, "=", value)
end
end
variadic(10, "Chào", 20, "Hàm biến số")
--[[ Kết quả đầu ra:
Tham số đã đặt tên = 10
Đầu vào số. 1 = Chào
Đầu vào số. 2 = 20
Đầu vào số. 3 = Hàm biến số
]]

Chuyển tiếp tham số

Bạn có thể định nghĩa các hàm biến số như là các hàm bọc quanh các hàm khác để chuyển tiếp, hoặc chuyển, các tham số từ hàm bọc đến các hàm khác.


local function printAround(functionToPrintAround, ...)
print("Trước")
functionToPrintAround(...)
print("Sau")
end
local function addNumbers(x, y, z)
print("x =", x)
print("y + z =", y + z)
end
printAround(addNumbers, 1, 2, 3)
--[[ Kết quả đầu ra:
Trước
x = 1
y + z = 5
Sau
]]

Gọi một hàm biến số với bảng

Nếu bạn muốn truyền một bảng mảng các giá trị đến một hàm biến số toàn cục, chẳng hạn như print(), bạn có thể sử dụng hàm toàn cục unpack() để chuyển các giá trị của bảng thay vì bảng đó.


local squares = {1, 4, 9, 16, 25}
print("Năm số bình phương đầu tiên là:", unpack(squares))
-- Năm số bình phương đầu tiên là 1 4 9 16 25
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.