while- og repeat-until-løkker
Brug while og repeat-until til betingelsesstyret iteration.
while- og repeat-until-løkker er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.
while-løkken
En while-løkke gentager sin krop, så længe betingelsen er sand. Betingelsen kontrolleres før hver gentagelse. Hvis betingelsen oprindeligt er falsk, udføres kroppen aldrig. Sørg altid for, at løkken bevæger sig mod afslutningsbetingelsen, så du undgår uendelige løkker.
local count = 1
while count <= 5 do
print(count)
count = count + 1
end
-- prints 1 through 5repeat-until-løkke
repeat...until-løkken svarer til en do-while-løkke i Lua. Løkkens krop udføres mindst én gang, og betingelsen kontrolleres efter hver gentagelse. Løkken stopper, når betingelsen bliver sand (det modsatte af while). Variabler, der er erklæret i kroppen, er synlige i betingelsen.
local n = 1
repeat
print(n)
n = n * 2
until n > 100
-- prints: 1, 2, 4, 8, 16, 32, 64Uendelige løkker med break
Brug while true do til hændelsesløkker eller gentagelsesmønstre sammen med break for at afslutte, når en betingelse er opfyldt. Dette mønster er almindeligt i spillets hovedløkker og netværksservere, der kører kontinuerligt.
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
endNedtælling med while
While-løkker fungerer lige så godt, når du tæller nedad. Det afgørende er at opdatere variablen på en måde, der på et tidspunkt opfylder afslutningsbetingelsen. Hvis du glemmer at opdatere tælleren, er det en almindelig årsag til uendelige løkker.
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 til validering af inddata
Mønstret repeat-until er ideelt til validering af inddata: spørg én gang, og kontrollér bagefter. I dette mønster kører kroppen altid mindst én gang, hvilket passer til det naturlige forløb: "spørg, og validér derefter".
-- 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) -- 5Løkkens variabler er lokale
Variabler, der erklæres med local inde i en løkkekrop, oprettes igen ved hver gentagelse. Det er vigtigt, når du indfanger løkkevariabler i lukninger — hver lukning indfanger sin egen kopi. Variabler, der erklæres uden for løkken, bevares mellem gentagelserne.
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]()) -- 3Akkumulatormønsteret
Et almindeligt anvendelsesområde for en while-løkke er at akkumulere et resultat. Sum, produkt, sammenkædning af strenge og opbygning af tabeller følger alle akkumulatormønsteret: initialisér før løkken, opdatér inde i løkken, og brug resultatet bagefter.
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.875Indlejrede løkker
Løkker kan indlejres. Hver løkke har sin egen tæller. Brug beskrivende variabelnavne for at gøre koden tydelig. Sætningen break afslutter kun den inderste omsluttende løkke — hvis du vil afslutte flere niveauer, kan du få brug for en flagvariabel eller 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 til afslutning af flere niveauer
Lua 5.2+ introducerede goto til at springe til en mærket position. Selvom det generelt frarådes, er det legitimt at bruge til at afslutte indlejrede løkker på en overskuelig måde uden en flagvariabel. Mærkater defineres med ::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")Afvejning mellem while og repeat
while: brug den, når løkken muligvis skal udføres nul gange — betingelsen kontrolleres først. repeat-until: brug den, når løkken skal udføres mindst én gang — betingelsen kontrolleres bagefter. Foretræk while til de fleste løkker. Brug repeat-until til menuer, forespørgsler og gentagelsesløkker, hvor handlingen skal udføres før kontrollen.
-- 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 doneHurtig kontrol
Hvornår kontrolleres betingelsen i en repeat...until-løkke?
Opsummering: while og repeat-until
Vigtige punkter:
while cond do ... end— kontrollerer før; kører muligvis slet ikkerepeat ... until cond— kontrollerer efter; kører mindst én gangbreakafslutter den inderste løkkegoto ::label::kan afslutte indlejrede løkker (Lua 5.2+)- Lokale løkkevariabler oprettes igen ved hver gentagelse
- Brug akkumulatormønsteret til at opbygge resultater
Lær Lua med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 40
- Lektioner
- 159
Ofte stillede spørgsmål
Er lektionen “while- og repeat-until-løkker” gratis?
Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “while- og repeat-until-løkker”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “while- og repeat-until-løkker”?
Brug while og repeat-until til betingelsesstyret iteration. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Lua Academy?
Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “while- og repeat-until-løkker”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Lua Academy-lektion?
Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- if-, elseif- og else-sætninger
- while- og repeat-until-løkker
- Numerisk for-løkke
- Generisk for og break