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

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

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

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

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

คำสั่ง If

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

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

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


if 2 + 2 == 5 then
print("สองบวกสองเป็นห้า") -- ไม่พิมพ์เพราะเงื่อนไขเป็นเท็จ
elseif 2 + 3 == 5 then
print("สองบวกสามเป็นห้า") -- สองบวกสามเป็นห้า
else
print("เงื่อนไขทั้งหมดล้มเหลว") -- ไม่พิมพ์เพราะเงื่อนไขก่อนหน้านี้เป็นจริง
end

ลูป While

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


local timeRemaining = 10
while timeRemaining > 0 do
print("วินาทีที่เหลือ: " .. timeRemaining)
task.wait(1)
timeRemaining -= 1
end
print("นาฬิกาถึงศูนย์!")
--[[ ผลลัพธ์ที่เกิดขึ้น:
วินาทีที่เหลือ: 10
วินาทีที่เหลือ: 9
วินาทีที่เหลือ: 8
วินาทีที่เหลือ: 7
วินาทีที่เหลือ: 6
วินาทีที่เหลือ: 5
วินาทีที่เหลือ: 4
วินาทีที่เหลือ: 3
วินาทีที่เหลือ: 2
วินาทีที่เหลือ: 1
นาฬิกาถึงศูนย์!
]]

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

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


while true do
print("กำลังวนลูป...")
task.wait(0.5)
end
--[[ ผลลัพธ์ที่เกิดขึ้น:
กำลังวนลูป...
กำลังวนลูป...
กำลังวนลูป...
กำลังวนลูป...
...
]]

ลูป Repeat

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


local currentGoblinCount = 18
-- สร้างกอบลินสูงสุด 25 ตัวในเกม
repeat
spawnGoblin()
currentGoblinCount += 1
print("จำนวนกอบลินปัจจุบัน: " .. currentGoblinCount)
until currentGoblinCount == 25
print("กอบลินกลับมาอีกครั้ง!")
--[[ ผลลัพธ์ที่เกิดขึ้น:
จำนวนกอบลินปัจจุบัน: 19
จำนวนกอบลินปัจจุบัน: 20
จำนวนกอบลินปัจจุบัน: 21
จำนวนกอบลินปัจจุบัน: 22
จำนวนกอบลินปัจจุบัน: 23
จำนวนกอบลินปัจจุบัน: 24
จำนวนกอบลินปัจจุบัน: 25
กอบลินกลับมาอีกครั้ง!
]]

ลูป For

ลูป for จะดำเนินการโค้ดจำนวนครั้งที่กำหนดขึ้นอยู่กับ เครื่องนับเชิงตัวเลข หรือจำนวน รายการในคอลเลกชัน

ลูป for เชิงตัวเลข

ลูป 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 ทั่วไปจะวนซ้ำผ่านรายการในคอลเลกชันแทนที่จะวนผ่านลำดับของตัวเลข ด้วยลูป for ทั่วไป คุณสามารถดำเนินการโค้ดสำหรับแต่ละรายการในคอลเลกชัน และสามารถใช้แต่ละรายการในโค้ดได้ง่าย

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

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

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


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

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


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() จะส่งคืนตัววนซ้ำที่วนผ่านดัชนีเชิงตัวเลขในตารางและส่งคืน ดัชนี และ ค่า สำหรับแต่ละองค์ประกอบ ซึ่งทำให้เหมาะสมสำหรับอาร์เรย์ที่มีดัชนีทั้งหมดเป็นตัวเลข


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() จะส่งคืนตัววนซ้ำที่วนผ่านทุกดัชนี (รวมถึงดัชนีเชิงตัวเลข) ในตารางและส่งคืน คีย์ และ ค่า สำหรับแต่ละรายการในพจนานุกรม ลำดับของการข้ามองค์ประกอบในตารางพจนานุกรมเป็นแบบสุ่ม ซึ่งทำให้เหมาะสมสำหรับการวนซ้ำผ่านพจนานุกรมซึ่งรายการถูกเก็บไว้นอกลำดับที่มีคีย์ที่ไม่ใช่เชิงตัวเลข


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("วินาทีที่ผ่านไป:", secondsElapsed)
if secondsElapsed == timeout then
break
end
end
print("ห้าวินาทีผ่านไป ถึงเวลาที่จะมองไปข้างหน้า!")
--[[ ผลลัพธ์ที่เกิดขึ้น:
1
2
3
4
5
ห้าวินาทีผ่านไป ถึงเวลาที่จะมองไปข้างหน้า!
]]

ต่อไปในลูป

เพื่อบังคับให้ลูปวนซ้ำและเริ่มต้นใหม่ ให้ใช้คีย์เวิร์ด 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
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ