ลูป while และ repeat-until
ใช้ while และ repeat-until เพื่อทำซ้ำตามเงื่อนไข
ลูป while และ repeat-until เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
ลูป while
ลูป while จะทำซ้ำเนื้อหาภายในตราบใดที่เงื่อนไขเป็นค่าจริง โดยจะตรวจสอบเงื่อนไขก่อนการทำซ้ำแต่ละครั้ง หากเงื่อนไขเป็นเท็จตั้งแต่แรก เนื้อหาภายในจะไม่ทำงานเลย โปรดตรวจสอบให้แน่ใจเสมอว่าลูปมีความคืบหน้าไปสู่เงื่อนไขสิ้นสุด เพื่อหลีกเลี่ยงลูปไม่รู้จบ
local count = 1
while count <= 5 do
print(count)
count = count + 1
end
-- prints 1 through 5ลูป repeat-until
ลูป repeat...until เป็นรูปแบบเทียบเท่ากับ do-while ของ Lua ส่วนเนื้อหาลูปจะทำงาน อย่างน้อยหนึ่งครั้ง และจะตรวจสอบเงื่อนไข หลังจากการทำงานแต่ละรอบ ลูปจะหยุดเมื่อเงื่อนไขเป็นจริง (ตรงข้ามกับ while) ตัวแปรที่ประกาศภายในส่วนเนื้อหาลูปจะมองเห็นได้ในเงื่อนไข
local n = 1
repeat
print(n)
n = n * 2
until n > 100
-- prints: 1, 2, 4, 8, 16, 32, 64ลูปไม่สิ้นสุดด้วย break
ใช้ while true do สำหรับลูปเหตุการณ์หรือรูปแบบการลองใหม่ โดยใช้ร่วมกับ break เพื่อออกจากลูปเมื่อเป็นไปตามเงื่อนไข รูปแบบนี้พบได้บ่อยในลูปหลักของเกมและเซิร์ฟเวอร์เครือข่ายที่ทำงานอย่างต่อเนื่อง
local attempts = 0
local MAX = 3
while true do
attempts = attempts + 1
print("Attempt " .. attempts)
if attempts >= MAX then
print("Max attempts reached")
break
end
endนับถอยหลังด้วย while
ลูป while ใช้สำหรับนับถอยหลังได้เช่นกัน สิ่งสำคัญคือต้องอัปเดตตัวแปรในลักษณะที่จะทำให้เป็นไปตามเงื่อนไขออกจากลูปในที่สุด การลืมอัปเดตตัวนับเป็นสาเหตุทั่วไปที่ทำให้เกิดลูปไม่สิ้นสุด
local i = 10
while i > 0 do
io.write(i .. " ")
i = i - 1
end
print() -- newline
-- output: 10 9 8 7 6 5 4 3 2 1repeat-until สำหรับตรวจสอบข้อมูลนำเข้า
รูปแบบ repeat-until เหมาะอย่างยิ่งสำหรับการตรวจสอบข้อมูลนำเข้า โดยรับข้อมูลหนึ่งครั้งแล้วจึงตรวจสอบภายหลัง ในรูปแบบนี้ส่วนเนื้อหาลูปจะทำงานอย่างน้อยหนึ่งครั้งเสมอ ซึ่งสอดคล้องกับลำดับตามธรรมชาติของการ "ถาม แล้วตรวจสอบ"
-- Simulated input validation
local inputs = {-1, 0, 5} -- pretend user input
local idx = 0
local value
repeat
idx = idx + 1
value = inputs[idx]
print("Got: " .. value)
until value > 0
print("Valid value: " .. value) -- 5ตัวแปรของลูปเป็นตัวแปรเฉพาะที่
ตัวแปรที่ประกาศด้วย local ภายในส่วนเนื้อหาลูปจะถูกสร้างใหม่ในแต่ละรอบ เรื่องนี้สำคัญเมื่อเก็บตัวแปรของลูปไว้ในโคลสเชอร์ เพราะโคลสเชอร์แต่ละตัวจะเก็บสำเนาของตนเอง ตัวแปรที่ประกาศนอกลูปจะคงอยู่ข้ามรอบการทำงาน
local callbacks = {}
for i = 1, 3 do
local captured = i -- local per iteration
callbacks[i] = function() return captured end
end
print(callbacks[1]()) -- 1
print(callbacks[2]()) -- 2
print(callbacks[3]()) -- 3รูปแบบตัวสะสม
กรณีใช้งานทั่วไปของลูป while คือการสะสมผลลัพธ์ การหาผลรวม ผลคูณ การต่อสตริง และการสร้างตาราง ล้วนใช้รูปแบบตัวสะสมเหมือนกัน ได้แก่ กำหนดค่าเริ่มต้นก่อนลูป อัปเดตค่าภายในลูป แล้วใช้ผลลัพธ์หลังลูป
local numbers = {3, 1, 4, 1, 5, 9, 2, 6}
local sum = 0
local i = 1
while i <= #numbers do
sum = sum + numbers[i]
i = i + 1
end
print("Sum:", sum) -- 31
print("Avg:", sum / #numbers) -- 3.875ลูปซ้อนกัน
สามารถซ้อนลูปไว้ภายในกันได้ แต่ละลูปจะมีตัวนับของตนเอง ควรใช้ชื่อตัวแปรที่สื่อความหมายเพื่อให้โค้ดอ่านง่าย คำสั่ง break จะออกจากลูปที่ครอบอยู่ ชั้นในสุดเท่านั้น หากต้องการออกจากหลายระดับ อาจต้องใช้ตัวแปรธงหรือ goto (Lua 5.2 ขึ้นไป)
local found = false
local target = 6
local i = 1
while i <= 3 and not found do
local j = 1
while j <= 3 do
if i * j == target then
print(i .. " * " .. j .. " = " .. target)
found = true
break
end
j = j + 1
end
i = i + 1
endgoto สำหรับการออกจากลูปหลายระดับ
Lua 5.2 ขึ้นไปเพิ่ม goto สำหรับกระโดดไปยังตำแหน่งที่มีป้ายกำกับ แม้โดยทั่วไปจะไม่แนะนำให้ใช้ แต่ก็เหมาะสมสำหรับการออกจากลูปซ้อนกันอย่างสะอาดโดยไม่ต้องใช้ตัวแปรธง ป้ายกำกับกำหนดด้วย ::name::
for i = 1, 5 do
for j = 1, 5 do
-- goto only valid approach for nested break in Lua
if i * j > 10 then
goto done
end
io.write(i*j .. " ")
end
end
::done::
print()
print("Stopped early")ข้อแลกเปลี่ยนระหว่าง while กับ repeat
while: ใช้เมื่ออาจต้องการให้ลูปทำงานศูนย์รอบ เพราะจะตรวจสอบเงื่อนไขก่อน repeat-until: ใช้เมื่อต้องการให้ลูปทำงานอย่างน้อยหนึ่งรอบ โดยตรวจสอบภายหลัง โดยทั่วไปควรเลือกใช้ while สำหรับลูปส่วนใหญ่ และใช้ repeat-until กับเมนู ข้อความแจ้ง และลูปลองใหม่ที่ต้องทำงานก่อนตรวจสอบ
-- while: may execute zero times
local ready = false
while ready do
print("never prints")
end
-- repeat-until: always executes at least once
local done = false
repeat
print("runs once even though done=false")
done = true
until doneตรวจสอบความเข้าใจ
เงื่อนไขในลูป repeat...until จะถูกตรวจสอบเมื่อใด
สรุป: while และ repeat-until
ประเด็นสำคัญ:
while cond do ... end— ตรวจสอบก่อน อาจไม่ทำงานเลยrepeat ... until cond— ตรวจสอบภายหลัง ทำงานอย่างน้อยหนึ่งครั้งbreakออกจากลูปชั้นในสุดgoto ::label::สามารถออกจากลูปซ้อนกันได้ (Lua 5.2 ขึ้นไป)- ตัวแปรเฉพาะที่ของลูปจะถูกสร้างใหม่ในแต่ละรอบ
- ใช้รูปแบบตัวสะสมเพื่อสร้างผลลัพธ์
คำถามที่พบบ่อย
บทเรียน “ลูป while และ repeat-until” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ลูป while และ repeat-until” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ลูป while และ repeat-until”
ใช้ while และ repeat-until เพื่อทำซ้ำตามเงื่อนไข คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ลูป while และ repeat-until” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คำสั่ง if, elseif และ else
- ลูป while และ repeat-until
- ลูป for เชิงตัวเลข
- for แบบทั่วไปและ break