====== Hàm trong Lua ======
Hàm trong Lua giống như các khối mã thực hiện một nhiệm vụ cụ thể. Chúng cho phép bạn đóng gói các đoạn mã, giúp bạn có thể tái sử dụng sau này. Chúng cũng giúp cho script của bạn trở nên có tính mô-đun hơn, điều này trong hầu hết các trường hợp là một thói quen tốt. Ngoài ra, hàm còn giúp mã nguồn dễ đọc hơn và dễ bảo trì hơn. Hàm có thể nhận các tham số đầu vào, thực hiện các thao tác, và trả về kết quả.\\
=====Cú pháp hàm=====
Một hàm có 5 phần chính: phần khai báo (câu lệnh **function**), tên hàm, các tham số, thân hàm (mã cần thực thi), và câu lệnh **end**.\\
-- Function definition
function functionName(params, ...)
-- Function body
end -- end statement, which marks the end of the function, or block
=====Tham số hàm=====
Hàm có thể nhận không hoặc nhiều tham số, đây là các giá trị được truyền vào hàm khi nó được gọi. Những tham số này có thể được sử dụng bên trong phần thân của hàm và cho phép bạn cung cấp dữ liệu đầu vào để tùy chỉnh hành vi của hàm.\\
__Ví dụ:__
-- Function with parameters
function greetPlayer(name)
print("Hello, " .. name .. "!")
end
function gameStart()
print("Game has started!")
end
-- Call the function with an argument
greetPlayer("Alice") -- Prints: Hello, Alice!
gameStart() -- Prints: Game has started!
Nếu bạn gọi hàm **greetPlayer** mà không truyền tham số nào, nó sẽ báo lỗi.
Nếu bạn gọi hàm **gameStart** với một tham số, tham số đó sẽ không được sử dụng, nhưng sẽ không có lỗi nào xảy ra.
=====Giá trị trả về=====
Hàm trong Lua có thể trả về một hoặc nhiều giá trị bằng cách sử dụng câu lệnh **return**. Những giá trị trả về này cho phép hàm truyền kết quả ngược lại cho nơi đã gọi hàm.\\
__Ví dụ:__
-- Function with return value
function addNumbers(x, y)
return x + y
end
local sum = addNumbers(5, 3)
print("Sum:", sum) -- Output: Sum: 8
Bạn có thể trả về bất kỳ kiểu giá trị nào, như hàm, bảng (table), biến, v.v.\\
=====Hàm ẩn danh=====
Lua cũng hỗ trợ các hàm ẩn danh, tức là các hàm không có tên. Những hàm này có thể được gán vào biến hoặc truyền làm đối số cho các hàm khác. Trong Mini World, chúng thường được sử dụng trong hàm lắng nghe (listener).\\
-- Anonymous function assigned to a variable
local square = function(x)
return x * x
end
-- Call the anonymous function
local result = square(4)
print("Square:", result) -- Output: Square: 16
Hàm ẩn danh làm đối số cho một hàm khác (trong trường hợp này là hàm listener):\\
Cả hai cách sau đều thực hiện cùng một chức năng.\\
function gameStart()
print("Hello, world!")
end
ScriptSupportEvent:registerEvent([=[Game.Start]=],gameStart)
ScriptSupportEvent:registerEvent([=[Game.Start]=],function()
print("Hello, world!")
end)
Cả hai hàm đều sẽ thực hiện giống nhau, và hàm ẩn danh cũng có thể nhận tham số.\\
__Ví dụ:__
function clickBlock(params)
local playerid = params.eventobjid
local blockid = params.blockid
print("A player has clicked a block with the id: ".. blockid)
print("The uid of the player that clicked the block is: ".. playerid)
end
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=], clickBlock)
ScriptSupportEvent:registerEvent([=[Player.ClickBlock]=],function(params)
local playerid = params.eventobjid
local blockid = params.blockid
print("A player has clicked a block with the id: ".. blockid)
print("The uid of the player that clicked the block is: ".. playerid)
end)
Cả hai hàm sẽ thực hiện cùng một hành động khi một khối (block) được nhấn chuột.
----