Cấu trúc điều khiển

*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.

Cấu trúc điều khiển là các câu lệnh quản lý luồng thực thi mã Luau. Có bốn loại cấu trúc điều khiển chính:

  • Một câu lệnh if then else thực hiện mã chỉ khi một điều kiện được chỉ định là true. Mã không được thực thi lặp lại.
  • Một vòng lặp while thực hiện mã chỉ khi một điều kiện được chỉ định là true, và lặp lại thực thi khi điều kiện vẫn là true.
  • Một vòng lặp repeat thực hiện mã và lặp lại thực thi nếu điều kiện là true.
  • Một vòng lặp for thực hiện mã một số lần nhất định tùy thuộc vào các đầu vào được chỉ định.

Điều kiện cho các câu lệnh if, vòng lặp while, và vòng lặp repeat có thể là bất kỳ biểu thức hoặc giá trị Luau nào. Nếu một giá trị không phải là false hoặc nil, thì Luau đánh giá nó là true trong các câu lệnh điều kiện. Khác với các ngôn ngữ kịch bản khác, Luau coi cả số không và chuỗi rỗng đều là true.

Câu lệnh If

Câu lệnh if cơ bản kiểm tra điều kiện của nó. Nếu điều kiện là đúng, thì Luau thực hiện mã giữa thenend.

Bạn có thể sử dụng câu lệnh elseif để kiểm tra các điều kiện bổ sung nếu điều kiện if là sai. Bạn cũng có thể sử dụng câu lệnh else để thực hiện mã nếu tất cả các điều kiện ifelseif đều không đúng. Các phần elseifelse đều là tùy chọn, nhưng bạn không thể sử dụng bất kỳ cái nào mà không có một câu lệnh if ban đầu.

Trong một chuỗi các điều kiện if, elseif, và else, Luau kiểm tra các điều kiện từ trên xuống dưới, dừng lại ở điều kiện đầu tiên là true, và thực hiện mã theo sau điều kiện đó.


if 2 + 2 == 5 then
print("Hai cộng hai là năm") -- Không in vì điều kiện sai
elseif 2 + 3 == 5 then
print("Hai cộng ba là năm") -- Hai cộng ba là năm
else
print("Tất cả các điều kiện đều không đúng") -- Không in vì điều kiện trước đó là đúng
end

Vòng lặp While

Vòng lặp whiledo đánh giá xem một điều kiện được chỉ định là đúng hay sai. Nếu điều kiện là false hoặc nil, thì vòng lặp kết thúc và Luau bỏ qua mã trong vòng lặp. Nếu điều kiện là true, thì Luau thực hiện mã trong vòng lặp và lặp lại quá trình.


local timeRemaining = 10
while timeRemaining > 0 do
print("Số giây còn lại: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Đồng hồ đã đạt đến số không!")
--[[ Kết quả đầu ra:
Số giây còn lại: 10
Số giây còn lại: 9
Số giây còn lại: 8
Số giây còn lại: 7
Số giây còn lại: 6
Số giây còn lại: 5
Số giây còn lại: 4
Số giây còn lại: 3
Số giây còn lại: 2
Số giây còn lại: 1
Đồng hồ đã đạt đến số không!
]]

Vòng lặp Vô hạn

Bạn có thể sử dụng một vòng lặp whiledo để viết các vòng lặp trò chơi vô hạn bằng cách đặt true làm điều kiện.


while true do
print("Lặp lại...")
task.wait(0.5)
end
--[[ Kết quả đầu ra:
Lặp lại...
Lặp lại...
Lặp lại...
Lặp lại...
...
]]

Vòng lặp Repeat

Vòng lặp repeatuntil lặp lại cho đến khi một điều kiện là true. Kiểm tra điều kiện diễn ra sau khi khối mã chạy, vì vậy khối mã luôn chạy ít nhất một lần. Không giống như các ngôn ngữ khác, không gian của một biến cục bộ được khai báo bên trong một vòng lặp repeatuntil bao gồm điều kiện.


local currentGoblinCount = 18
-- Tạo goblin lên đến tối đa 25 trong trò chơi
repeat
spawnGoblin()
currentGoblinCount += 1
print("Số lượng goblin hiện tại: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblin đã được tái sinh!")
--[[ Kết quả đầu ra:
Số lượng goblin hiện tại: 19
Số lượng goblin hiện tại: 20
Số lượng goblin hiện tại: 21
Số lượng goblin hiện tại: 22
Số lượng goblin hiện tại: 23
Số lượng goblin hiện tại: 24
Số lượng goblin hiện tại: 25
Goblin đã được tái sinh!
]]

Vòng lặp For

Một vòng lặp for thực hiện mã một số lần nhất định, dựa trên một bộ đếm số hoặc số lượng mục trong một bộ sưu tập.

Vòng lặp For số

Một vòng lặp fordo xác định số lần thực hiện vòng lặp bằng cách sử dụng một bộ đếm. Vòng lặp được khai báo với một giá trị bắt đầu, giá trị kết thúc, và khoảng tăng tùy chọn.

Luau đặt bộ đếm bằng giá trị bắt đầu, thực hiện khối mã trong vòng lặp for, rồi thêm khoảng tăng vào bộ đếm. Nếu khoảng tăng là dương, thì quá trình lặp lại cho đến khi bộ đếm bằng hoặc lớn hơn giá trị kết thúc. Nếu khoảng tăng là âm, thì quá trình lặp lại cho đến khi bộ đếm bằng hoặc nhỏ hơn giá trị kết thúc.

Khoảng tăng tùy chọn mặc định là 1. Nó không cần phải là một số nguyên.


for counter = 1, 3 do
print(counter)
end
--[[ Kết quả đầu ra:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ Kết quả đầu ra:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ Kết quả đầu ra:
2
1.5
1
0.5
0
]]

Vòng lặp For tổng quát

Vòng lặp for tổng quát lặp qua các mục trong một bộ sưu tập thay vì một chuỗi số. Với các vòng lặp for tổng quát, bạn có thể thực hiện mã cho mỗi mục trong bộ sưu tập, và có thể dễ dàng sử dụng mỗi mục trong mã.

Các vòng lặp for cần một hàm, hoặc một iterator, để lặp qua các loại bộ sưu tập khác nhau. Hàm toàn cục ipairs() trả về một iterator cho các mảng, và hàm toàn cục pairs() trả về một iterator cho các từ điển. Thư viện string cung cấp string.gmatch() để lặp qua các chuỗi.

Lặp lại tổng quát

Trong Luau, bạn có thể lặp qua một bảng bằng cách sử dụng từ khóa in trực tiếp trên bảng, thay vì sử dụng một hàm iterator như ipairs():


for i, v in {1, 2, 3, 4, 5} do
print(i, v)
end

Lặp lại tổng quát cũng cho phép bạn sử dụng phương thức huyền bí __iter để tạo một hàm iterator tùy biến. Ví dụ được tạo ra này lặp qua một mảng theo thứ tự ngược lại, từ phần tử cuối cùng đến phần tử đầu tiên:


local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
--[[ Kết quả đầu ra:
5 5
4 4
3 3
2 2
1 1
]]

Mảng

Hàm ipairs() trả về một iterator lặp qua các chỉ số số trong một bảng và trả về một indexvalue cho mỗi phần tử. Điều này làm cho nó phù hợp cho các mảng, nơi tất cả các chỉ số đều là số.


local array = {"a", "b", "c", "d", "e"}
for index, value in ipairs(array) do
print(index, value)
end
--[[ Kết quả đầu ra:
1 a
2 b
3 c
4 d
5 e
]]

Từ điển

Hàm pairs() trả về một iterator lặp qua tất cả các chỉ số (bao gồm cả chỉ số số) trong một bảng và trả về một keyvalue cho mỗi mục trong từ điển. Thứ tự duyệt qua các phần tử trong một bảng từ điển là tùy tiện. Điều này làm cho nó phù hợp để lặp qua các từ điển, nơi các mục được lưu trữ không theo thứ tự với các chỉ số không phải số.


local dictionary = {
[1] = "a",
["Hello"] = "b",
[5] = "c",
[true] = "d",
["World"] = "f",
[false] = "e"
}
for key, value in pairs(dictionary) do
print(key, value)
end
--[[ Kết quả đầu ra:
Hello b
true d
false e
World f
5 c
1 a
]]

Kết thúc vòng lặp

Để buộc một vòng lặp kết thúc, sử dụng từ khóa break. Mẫu mã sau đây cho thấy cách để kết thúc một vòng lặp vô hạn whiledo.


local secondsElapsed = 0
local timeout = 5
while true do
task.wait(1)
secondsElapsed += 1
print("Số giây đã trôi qua:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("Đã trôi qua năm giây. Thời gian để tiến tới!")
--[[ Kết quả đầu ra:
1
2
3
4
5
Đã trôi qua năm giây. Thời gian để tiến tới!
]]

Tiếp tục vòng lặp

Để buộc một vòng lặp tiếp tục và bắt đầu lại, sử dụng từ khóa continue. Một vòng lặp for sẽ lặp lại bộ đếm; whilerepeatuntil sẽ kiểm tra điều kiện vòng lặp trước khi tiếp tục. Mẫu mã sau đây lấy tất cả các con của một Instance của một ClassName.


local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- Lặp lại vòng lặp
table.insert(children, child)
end
return children
end
©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.