[Roblox Scripting | vi] Lua Function Basic

Functions
<p>Definition of functions and use in Lua code</p>

Function (hàm số) là một tập hợp các command (lệnh), có thể được sử dụng nhiều lần trong một script (tập lệnh). Sau khi được define (định nghĩa), một function có thể được execute (thực thi) thông qua một command hoặc được kích hoạt thông qua một event (sự kiện).

Thuật ngữ

  • Hàm số: Function (noun)
  • Biến số: Variable (noun)
  • Lệnh (đơn): Command (noun)
  • Tham số: Parameter (noun)
  • Tập lệnh: Script (noun)
  • Sự kiện: Event (noun)
  • Phạm vi sử dụng: Scope (noun)
  • Cặp ngoặc đơn (): Parentheses (noun)
  • Kích hoạt: Trigger (verb)
  • Định nghĩa: Define (verb)
  • Thực thi: Execute (verb)

Định nghĩa Function

Một khai báo function cơ bản bao gồm từ khóa function theo sau là tên function và một cặp dấu ngoặc đơn (). Vì phần thân của hàm sẽ là một khối lệnh (command block), nên nó phải được đóng bằng từ khóa end.

local function addNumbers()
 
end

Giữa () và end là nơi các lệnh và mã khác tạo nên body function (thân hàm). Các lệnh này sẽ được thực thi khi hàm được gọi:

local function addNumbers()
	-- Function body
	print("Function called!")
end

Gọi một Function

Khi một hàm được định nghĩa, nó có thể được thực thi bằng cách gọi đúng tên (các hàm không tự thực thi). Để gọi một hàm, chỉ cần nhập tên của nó, theo sau là dấu ngoặc đơn ():

local function addNumbers()
	-- Function body
	print("Function called!")
end
 
addNumbers()

Tham số trong Function

Các hàm có thể sử dụng các tham số để chứa dữ liệu được truyền vào. Khi bạn khai báo một hàm, bạn có thể thêm một hoặc nhiều tên tham số bên trong dấu ngoặc đơn:

-- "num1" and "num2" are parameters
local function addNumbers(num1, num2)
 
end

Khi gọi một hàm với các tham số, bạn cần chỉ định các giá trị sẽ được truyền cho hàm. Ví dụ: hàm addNumbers bên dưới nhận hai số được chuyển vào trong mỗi lần gọi, cộng giá trị 2 tham số này lại với nhau và xuất ra kết quả:

local function addNumbers(num1, num2)
	local result = num1 + num2
	print(num1 .. " + " .. num2 .. " = " .. result)
end
 
addNumbers(2, 3)
addNumbers(4, 0.5)
addNumbers(1000, 500)

Các tham số của hàm luôn là tồn tại cục bộ trong hàm và chỉ được sử dụng trong phạm vi của hàm và các phạm vi thuộc hàm.

Nếu bạn gọi một hàm Lua với nhiều tham số hơn so với khai báo, những tham số thừa sẽ bị bỏ qua. Ngược lại, nếu hàm được khai báo với nhiều tham số hơn bạn cung cấp, giá trị nil sẽ được sử dụng cho tất cả các tham số bị thiếu.

Function trả về giá trị

Ngoài việc chấp nhận các tham số, các hàm cũng có thể trả về (gửi lại) dữ liệu cho lệnh đang gọi. Điều này được thực hiện thông qua return các giá trị. Làm việc với ví dụ trên, hàm sau trả về tổng thay vì in nó:

local function addNumbers(num1, num2)
	local result = num1 + num2
	return result
end

Không đặt bất kỳ lệnh nào theo sau lệnh return lệnh vì làm như vậy sẽ tạo ra lỗi.

Khi một hàm trả về giá trị, giá trị này có thể được gán cho một biến hoặc được sử dụng ở bất cứ nơi nào một biến có thể được sử dụng. Đoạn mã sau minh họa khái niệm này:

local function addNumbers(num1, num2)
	local result = num1 + num2
	return result
end
 
-- Call the function and store the returned value in variables
local result1 = addNumbers(2, 3)
print(result1)
local result2 = addNumbers(1000, 1000)
print(result2)

Không giống như một số ngôn ngữ lập trình, Lua thậm chí còn cho phép bạn trả về nhiều giá trị từ một hàm:

local function addAndSubtract(num1, num2)
	local sum = num1 + num2
	local difference = num1 - num2
	return sum, difference
end
 
local sum, difference = addAndSubtract(2, 3)
print(sum)
print(difference)

Playground

Cùng thử tạo một funtion của mình nào!
Link Playground: https://onecompiler.com/lua/