0Pricing
Lua Academy · Lektion

Zustandslose Iteratoren

Schreiben Sie zustandslose Iteratoren wie ipairs und implementieren Sie eigene Varianten

Zustandslose Iteratoren ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist ein zustandsloser Iterator?

Ein zustandsloser Iterator enthält keinen internen Zustand. Alle Informationen werden bei jedem Aufruf als Argumente übergeben: der unveränderliche Zustand und die aktuelle Steuervariable.

ipairs: Das kanonische Beispiel

ipairs ist zustandslos: Es verwendet die Tabelle als Zustand und den aktuellen Index als Steuervariable.

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

Ein zustandsloser Iterator, der aufeinanderfolgende Quadratzahlen zurückgibt. Der Zustand enthält das Limit, die Steuervariable ist die aktuelle Zahl.

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

Keine Closure erforderlich

Zustandslose Iteratoren vermeiden die Erstellung von Closures. Da der gesamte Zustand als Argumente übergeben wird, entsteht pro Iteration keine Heap-Allokation.

Iterator im pairs-Stil implementieren

Ein zustandsloser Schlüssel-Wert-Iterator, der next als Iteratorfunktion verwendet – genau wie pairs.

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

next-Funktion

next(t, k) gibt das nächste Schlüssel-Wert-Paar nach dem Schlüssel k zurück. Übergeben Sie nil (oder lassen Sie das Argument weg), um am Anfang zu beginnen.

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

Benutzerdefinierter Bereichsiterator

Ein zustandsloser Bereichsiterator mit Schrittweite. Der Zustand enthält eine Konfigurationstabelle, die Steuervariable ist der aktuelle Wert.

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

Leistungsvorteil

Zustandslose Iteratoren eignen sich ideal für enge Schleifen. Pro Aufruf wird keine Closure erstellt, wodurch sie bei einfachen Durchläufen schneller als zustandsbehaftete Closure-Iteratoren sind.

Einschränkungen

Wenn die Iteration einen komplexen Zustand erfordert (mehrere Zähler, Warteschlangen oder dynamische Daten), werden zustandslose Iteratoren unhandlich. Verwenden Sie stattdessen zustandsbehaftete Closure-Iteratoren oder Coroutines.

Kombination mit table.move

Ein zustandsloser Slice-Iterator gibt Elemente aus einem Tabellenausschnitt zurück. Der unveränderliche Zustand enthält das Array und den Endindex, die Steuervariable ist der aktuelle Index.

Zustandslose Iteratoren der Standardbibliothek

ipairs, pairs (über next) und string.gmatch verwenden intern zustandslose oder nahezu zustandslose Entwürfe.

Frage zu zustandslosen Iteratoren

Was macht einen Iterator zustandslos?

Zusammenfassung: Zustandslose Iteratoren

Zustandslose Iteratoren erhalten den gesamten Kontext als Argumente, erfordern keine Closure-Allokation und sind sehr leistungsfähig. Sie eignen sich ideal für einfache sequenzielle Durchläufe wie die Indizierung von Arrays.

Häufig gestellte Fragen

Ist die Lektion „Zustandslose Iteratoren“ kostenlos?

Ja — der vollständige Text von „Zustandslose Iteratoren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Zustandslose Iteratoren“?

Schreiben Sie zustandslose Iteratoren wie ipairs und implementieren Sie eigene Varianten Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Zustandslose Iteratoren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Das Protokoll für generische for-Schleifen
  2. Zustandslose Iteratoren
  3. Zustandsbehaftete Iteratoren mit Closures
  4. Generatoren auf Coroutine-Basis
← Zurück zu Lua Academy