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.