โครงสร้างการควบคุม

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

โครงสร้างการควบคุม เป็นคำสั่งที่จัดการการไหลของการดำเนินการโค้ด Luau มีสี่ประเภทหลักของโครงสร้างการควบคุม:

  • คําสั่ง ถ้าแล้วอื่น จะดําเนินการระบุรหัสเฉพาะเมื่อเงื่อนไขที่กําหนดเป็น true คําสั่งดําเนินการรหัสไม่ซ้ํากัน
  • ลูป while ดำเนินโค้ดเฉพาะถ้าเงื่อนไขที่กำหนดเป็น และทำซ้ำการดำเนินการในขณะที่เงื่อนไขยังคงอยู่
  • ลูปซ้ำ รหัสดำเนินการโค้ดและทำซ้ำการดำเนินการหากเงื่อนไขเป็น true
  • A สําหรับลูป ดําเนินโค้ดจํานวนครั้งตามที่กําหนดไว้ขึ้นอยู่กับอินพุตที่ระบุ

เงื่อนไขสำหรับคําสั่ง if ลูป, while ลูป และ repeat ลูปสามารถเป็นคําสั่ง Luau หรือค่าใดก็ได้หากค่าไม่ใช่ false หรือ nil แล้ว Luau จะประเมินมันเป็น true ในคําสั่งเงื่อนไขไม่เหมือนภาษาสคริปต์อื่น ๆ Luau พิจารณาทั้งศูนย์และสตริงว่างเปล่าเป็น true

ถ้าคำสั่ง

คำสั่งพื้นฐาน if ทดสอบเงื่อนไข หากเงื่อนไขเป็นจริง Luau จะดำเนินโค้ดระหว่าง then และ end

คุณสามารถใช้คำสั่ง elseif เพื่อทดสอบเงื่อนไขเพิ่มเติมหากเงื่อนไข if เป็นเท็จคุณสามารถใช้คำสั่ง else เพื่อดําเนินการรหัสหากทั้งหมด if และ elseif เงื่อนไขล้มเหลวส่วน elseif และ else ทั้งสองเป็นตัวเลือก แต่คุณไม่สามารถใช้ได้โดยไม่มีคำสั่งเริ่มต้น if

ในลำดับของ if , elseif และ else เงื่อนไข Luau ทดสอบเงื่อนไขจากบนลงล่าง, หยุดที่เงื่อนไขแรก true และดำเนินโค้ดที่ตามมา


if 2 + 2 == 5 then
print("Two plus two is five") -- ไม่พิมพ์เพราะเงื่อนไขเป็นเท็จ
elseif 2 + 3 == 5 then
print("Two plus three is five") -- สองบวกสามคือห้า
else
print("All conditions failed") -- ไม่พิมพ์เพราะเงื่อนไขก่อนหน้าเป็นจริง
end

ในขณะที่ลูป

ลูป whiledo ประเมินว่าเงื่อนไขที่กำหนดเป็นจริงหรือเท็จหากเงื่อนไขคือ false หรือ nil แล้วลูปจะสิ้นสุดและ Luau จะข้ามโค้ดในลูปหากเงื่อนไขคือ true แล้ว Luau จะดำเนินโค้ดในลูปและทำซ้ำกระบวนการ


local timeRemaining = 10
while timeRemaining > 0 do
print("Seconds remaining: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("Timer reached zero!")
--[[ ผลผลิตที่ได้:
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!
]]

ลูปไม่สิ้นสุด

คุณสามารถใช้ลูป whiledo เพื่อเขียนลูปเกมไม่สิ้นสุดโดยการตั้งค่า true เป็นเงื่อนไข


while true do
print("Looping...")
task.wait(0.5)
end
--[[ ผลผลิตที่ได้:
Looping...
Looping...
Looping...
Looping...
...
]]

ทำซ้ำลูป

ลูป repeatuntil ทำซ้ำจนกว่าเงื่อนไขจะเป็นจริงการทดสอบแบบมีเงื่อนไขประเมิน หลังจาก บล็อกโค้ดทำงานแล้ว ดังนั้นบล็อกโค้ดจะทำงานอย่างน้อยหนึ่งครั้งเสมอไม่เหมือนภาษาอื่นๆ ขอบเขต Luau ของตัวแปรท้องถิ่นที่ประกาศภายในลูป repeatuntil รวมถึงเงื่อนไข


local currentGoblinCount = 18
-- เรียกก๊อบลินสูงสุด 25 ในเกม
repeat
spawnGoblin()
currentGoblinCount += 1
print("Current goblin count: " .. currentGoblinCount)
until currentGoblinCount == 25
print("Goblins repopulated!")
--[[ ผลผลิตที่ได้:
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!
]]

สำหรับลูป

การดำเนินการซ้ำตามลําดับสําหรับลูปจะดําเนินการโค้ดจํานวนครั้งตามที่กําหนดไว้ ไม่ว่าจะเป็นตามเครื่องนับเลข หรือจํานวน รายการในคอลเลกชัน

ตัวเลขสำหรับลูป

ลูป fordo กำหนดจำนวนครั้งที่จะดำเนินการลูปโดยใช้เครื่องนับลูปจะถูกประกาศด้วยมูลค่าเริ่มต้น, มูลค่าสิ้นสุด และการเพิ่มขึ้นที่ไม่จำเป็น

Luau ตั้งค่านับเท่ากับมูลค่าเริ่มต้น ดำเนินบล็อกโค้ดในลูป for แล้วเพิ่มการเพิ่มขึ้นให้กับนับหากการเพิ่มเป็นบวกแล้วกระบวนการจะทำซ้ำจนกว่าเครื่องนับจะเท่ากับหรือมากกว่ามูลค่าสุดท้ายหากการเพิ่มเป็นลบ กระบวนการจะทำซ้ำจนกว่าเครื่องนับจะเท่ากับหรือน้อยกว่ามูลค่าสุดท้าย

การเพิ่มเติมทางเลือกจะเริ่มต้นที่ 1 ไม่จำเป็นต้องเป็นตัวเลขทั้งหมด


for counter = 1, 3 do
print(counter)
end
--[[ ผลผลิตที่ได้:
1
2
3
]]
for counter = 1, 6, 2 do
print(counter)
end
--[[ ผลผลิตที่ได้:
1
3
5
]]
for counter = 2, 0, -0.5 do
print(counter)
end
--[[ ผลผลิตที่ได้:
2
1.5
1
0.5
0
]]

ทั่วไปสำหรับลูป

ลูปทั่วไป for ซ้ำไปเหนือรายการในคอลเลกชันแทนที่จะเป็นลำดับของตัวเลขด้วยลูปทั่วไป for รหัส

สำหรับลูปต้องมีฟังก์ชันหรือผู้รวบรวมเพื่อจัดทำซ้ำประเภทคอลเลกชันที่แตกต่างกันทั่วโลก ipairs() ส่งคืนตัวเรียกสําหรับลำดับและทั่วโลก pairs() ส่งคืนตัวเรียกสําหรับสารานุกรมห้องสมุด string ให้บริการ string.gmatch() ในการเลื่อนผ่านสตริง

การซ้ำแบบทั่วไป

ใน Luau คุณสามารถทำซ้ำบนตารางโดยใช้คําสําคัญ in โดยตรงบนตารางแทนที่จะใช้ฟังก์ชันผู้ซ้ำเช่น ipairs() :


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

การหมุนทั่วไปยังช่วยให้คุณสามารถใช้ metamethod __iter เพื่อสร้างฟังก์ชัน iterator ที่กําหนดเองตัวอย่างที่สร้างขึ้นนี้จะซ้ำรอบอาร์เรย์ในลำดับย้อนกลับ จากองค์ประกอบสุดท้ายไปยังองค์ประกอบแรก:


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
--[[ ผลผลิตที่ได้:
5 5
4 4
3 3
2 2
1 1
]]

คอลเลกชัน

ฟังก์ชัน ipairs() จะคืนตัวเลื่อนที่เลื่อนผ่านดัชนีทางเลขในตารางและคืน index และ value สำหรับแต่ละองค์ประกอบสิ่งนี้ทำให้เหมาะสำหรับคอลเลกชันที่ทั้งหมดของดัชนีเป็นตัวเลข


local array = {"a", "b", "c", "d", "e"}
for index, value in ipairs(array) do
print(index, value)
end
--[[ ผลผลิตที่ได้:
1 a
2 b
3 c
4 d
5 e
]]

สารานุกรม

ฟังก์ชัน pairs() จะคืนตัวเลื่อนที่เลื่อนผ่านทุกดัชนี (รวมถึงดัชนีเชิงตัวเลข) ในตารางและคืน key และ value สำหรับแต่ละรายการในสารานุกรมลำดับการเดินทางขององค์ประกอบในตารางสารานุกรมมีอิสระสิ่งนี้ทำให้เหมาะสมสำหรับการเลื่อนผ่านสารานุกรมที่รายการจะถูกจัดเก็บออกจากลำดับด้วยดัชนีที่ไม่ใช่ตัวเลข


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
--[[ ผลผลิตที่ได้:
Hello b
true d
false e
World f
5 c
1 a
]]

ทำลายลูป

เพื่อบังคับให้ลูปสิ้นสุด ใช้คําสําคัญ break เพื่อแสดงวิธีทำลายลูปไม่สิ้นสุด 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!")
--[[ ผลผลิตที่ได้:
1
2
3
4
5
Five seconds elapsed. Time to move on!
]]

ดำเนินการซ้ำต่อไป

เพื่อบังคับให้ลูปซ้ำและเริ่มต้นอีกครั้งใช้คําสําคัญ continueลูป for ต่อรอง; while และ repeatuntil จะตรวจสอบเงื่อนไขลูปก่อนที่จะดำเนินการต่อตัวอย่างโค้ดต่อไปนี้ได้รับลูกทั้งหมดของ Instance ของเฉพาะ ClassName ที่กำหนด


local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- ทำซ้ำลูป
table.insert(children, child)
end
return children
end