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 tuyên bố quản lý dòng chảy thực thi mã Luau. Có bốn loại cấu trúc điều khiển chính:

  • Một if sau đó else tuyên bố thực thi mã chỉ khi một điều kiện được chỉ định là true. Việc thực thi mã không 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 định nghĩa là true , và lặp lại thực hiện trong khi điều kiện vẫn còn true .
  • Một vòng lặp lặp lại lặp lại mã và lặp lại thực thi nếu điều kiện là true .
  • Một cho vòng lặp thực hiện mã một số lần tuỳ thuộc vào các đầu vào được chỉ định.

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

Nếu câu lệnh

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

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

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


if 2 + 2 == 5 then
print("Two plus two is five") -- Không in vì điều kiện là sai
elseif 2 + 3 == 5 then
print("Two plus three is five") -- Hai cộng ba là năm
else
print("All conditions failed") -- Không in vì điều kiện trước đó là đúng
end

Trong khi vòng lặp

Một vòng lặp whiledo kiểm tra xem một điều kiện được chỉ định có đúng hay không.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 thi mã trong vòng lặp và lặp lại quá trình.


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
--[[ Kết quả ra:
Seconds remaining: 10
Seconds remaining: 9
Seconds remaining: 8
Seconds remaining: 7
Seconds remaining: 6
Seconds remaining: 5
Seconds remaining: 4
Seconds remaining: 3
Seconds remaining: 2
Seconds remaining: 1
Timer reached zero!
]]

Vòng lặp vô hạn

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


while true do
print("Looping...")
task.wait(0.5)
end
--[[ Kết quả ra:
Looping...
Looping...
Looping...
Looping...
...
]]

Lặp lại vòng lặp

Vòng lặp repeatuntil lặp lại cho đến khi điều kiện là đúng.Bài kiểm tra điều kiện đánh giá 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, phạm vi Luau của một biến địa phương được tuyên bố bên trong một vòng lặp repeat - until bao gồm điều kiện.


local currentGoblinCount = 18
-- Gọi các yêu tinh lên đến tối đa 25 trong trò chơi
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
--[[ Kết quả ra:
Current goblin count: 19
Current goblin count: 20
Current goblin count: 21
Current goblin count: 22
Current goblin count: 23
Current goblin count: 24
Current goblin count: 25
Goblins repopulated!
]]

Đối với vòng lặp

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

Số cho vòng lặp

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 trả giáđếm.Vòng lặp được tuyên bố với giá trị bắt đầu, giá trị kết thúc và tăng tùy chọn.

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

Tăng tối thiểu bắt buộc sẽ là 1 . Nó không cần phải là một số lẻ.


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

Thông thường cho vòng lặp

Vòng lặp chung for 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 chung for, bạn có thể thực thi mã cho mỗi vật phẩm trong bộ sưu tập, và có thể dễ dàng sử dụng mỗi vật phẩm trong mã.

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

Lặp lại chung

Ở Luau, bạn có thể lặp lại trên 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 chức năng lặp lại như ipairs() :


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

Lặp lại hóa chung cũng cho phép bạn sử dụng __iter metamethod để tạo một chức năng trình lặp tùy chỉnh.Ví dụ này được lặp lại trên một mảng theo thứ tự ngược lại, từ yếu tố cuối cùng của nó đến yếu 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ả ra:
5 5
4 4
3 3
2 2
1 1
]]

Mảng

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


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

Từ điển

Chức năng pairs() trả về một iterator lặp qua tất cả các chỉ mục (bao gồm cả chỉ mục số) trong một bảng và trả về một keyvalue cho mỗi bản ghi trong từ điển.Thứ tự lướt qua các yếu tố trong bảng từ điển là tùy tiện.Điều này làm cho nó phù hợp để lặp lại qua các từ điển, nơi các mục được lưu ra khỏi trật tự với các chỉ mục không phải là 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ả ra:
Hello b
true d
false e
World f
5 c
1 a
]]

Phá vòng lặp

Để buộc một vòng lặp kết thúc, hãy sử dụng từ khóa break. Ví dụ sau đây cho thấy cách phá vỡ 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("Seconds elapsed:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("Five seconds elapsed. Time to move on!")
--[[ Kết quả ra:
1
2
3
4
5
Five seconds elapsed. Time to move on!
]]

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

Để buộc một vòng lặp lặp lại và bắt đầu lại, hãy sử dụng từ khóa continue.Một vòng lặp for sẽ lặp qua trả giáđếm; whilerepeatuntil sẽ kiểm tra điều kiện vòng lặp trước khi tiếp tục.Ví dụ mã sau đây nhận tất cả các con của một Instance của một đối tượng cụ thể 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