Lua Academy · Les

Stateless iterators

Schrijf stateless iterators zoals ipairs en implementeer aangepaste varianten

Les 2 van 413 stappen

Stateless iterators is een gratis Lua Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Wat is een toestandsloze iterator?

Een toestandsloze iterator heeft geen interne toestand. Alle informatie wordt bij elke aanroep als argument doorgegeven: de onveranderlijke toestand en de huidige besturingsvariabele.

ipairs: het standaardvoorbeeld

ipairs is toestandsloos — het gebruikt de tabel als toestand en de huidige index als besturingsvariabele.

local function myIpairs(t, i)
  i = i + 1
  local v = t[i]
  if v ~= nil then return i, v end
end
-- Use: for i,v in myIpairs, t, 0 do

squares-iterator

Een toestandsloze iterator die opeenvolgende kwadraten retourneert. De toestand bevat de limiet en de besturingsvariabele is het huidige getal.

local function squaresIter(max, n)
  n = n + 1
  if n <= max then return n, n*n end
end
for n, sq in squaresIter, 5, 0 do
  print(n, sq)
end

Geen closure nodig

Toestandsloze iterators vermijden het maken van closures. Omdat alle toestand als argument wordt doorgegeven, vindt er per iteratie geen heaptoewijzing plaats.

Een pairs-achtige iterator implementeren

Een toestandsloze sleutel-waarde-iterator die next als iteratorfunctie gebruikt — precies zoals pairs werkt.

for k, v in next, {a=1, b=2} do
  print(k, v)
end

next-functie

next(t, k) retourneert het volgende sleutel-waardepaar na sleutel k. Geef nil door (of laat het weg) om aan het begin te beginnen.

local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)

Aangepaste bereikiterator

Een toestandsloze bereikiterator met een stapgrootte. De toestand bevat een configuratietabel; de besturing is de huidige waarde.

local function rangeIter(state, n)
  n = n + state.step
  if n <= state.limit then return n end
end
for v in rangeIter, {limit=10, step=2}, 0 do
  print(v)
end

Prestatievoordeel

Toestandsloze iterators zijn ideaal voor krappe lussen. Per aanroep wordt geen closure gemaakt, waardoor ze sneller zijn dan iterators met toestandsvolle closures voor eenvoudige doorlopen.

Beperkingen

Wanneer iteratie een complexe toestand vereist (meerdere tellers, wachtrijen of dynamische gegevens), worden toestandsloze iterators onhandig. Gebruik in plaats daarvan iterators met toestandsvolle closures of coroutines.

Combineren met table.move

Een toestandsloze slice-iterator retourneert elementen uit een tabelsegment. De onveranderlijke toestand bevat de array en eindindex; de besturing is de huidige index.

Toestandsloze iterators in de standaardbibliotheek

ipairs, pairs (via next) en string.gmatch gebruiken intern toestandsloze of vrijwel toestandsloze ontwerpen.

Vraag over toestandsloze iterators

Waardoor is een iterator toestandsloos?

Samenvatting: toestandsloze iterators

Toestandsloze iterators ontvangen alle context als argumenten, vereisen geen toewijzing van closures en leveren zeer goede prestaties. Ze zijn ideaal voor eenvoudige opeenvolgende doorlopen, zoals array-indexering.

Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Stateless iterators” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Stateless iterators”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Stateless iterators”?

Schrijf stateless iterators zoals ipairs en implementeer aangepaste varianten Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Stateless iterators”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het generieke-forprotocol
  2. Stateless iterators
  3. Stateful iterators met closures
  4. Generators op basis van coroutines
← Terug naar Lua Academy