Zum Inhalt springen

For-Schleife

Es gibt zwei Formen der for-Schleife, genau wie in Lua: eine numerische und eine generische.

for i = 10, 20
print i
for k = 1, 15, 2 -- ein optionaler Schritt
print k
for key, value in pairs object
print key, value

Die Slicing- und *-Operatoren können verwendet werden, genau wie bei Comprehensions:

for item in *items[2, 4]
print item

Eine kürzere Syntax ist für alle Varianten verfügbar, wenn der Rumpf nur eine Zeile hat:

for item in *items do print item
for j = 1, 10, 3 do print j

Eine for-Schleife kann auch als Ausdruck verwendet werden. Die letzte Anweisung im Schleifenrumpf wird in einen Ausdruck umgewandelt und an eine wachsende Array-Tabelle angehängt.

Alle geraden Zahlen verdoppeln:

doubled_evens = for i = 1, 20
if i % 2 == 0
i * 2
else
i

Zusätzlich unterstützen for-Schleifen break mit Rückgabewerten, sodass die Schleife selbst als Ausdruck verwendet werden kann, der früh mit einem sinnvollen Ergebnis endet. for-Ausdrücke unterstützen mehrere break-Werte.

Beispiel: die erste Zahl größer als 10 finden:

first_large = for n in *numbers
break n if n > 10

Diese break-mit-Wert-Syntax ermöglicht knappe und ausdrucksstarke Such- bzw. Early-Exit-Muster direkt in Schleifenausdrücken.

key, score = for k, v in pairs data
break k, v * 10 if k == "target"

Du kannst Werte auch filtern, indem du den for-Ausdruck mit continue kombinierst.

for-Schleifen am Ende eines Funktionsrumpfs werden nicht in eine Tabelle für einen Rückgabewert gesammelt (stattdessen gibt die Funktion nil zurück). Du kannst entweder explizit return verwenden oder die Schleife in eine Listen-Comprehension umwandeln.

func_a = -> for i = 1, 10 do print i
func_b = -> return for i = 1, 10 do i
print func_a! -- gibt nil aus
print func_b! -- gibt Tabellenobjekt aus

Das verhindert die unnötige Erstellung von Tabellen in Funktionen, die die Ergebnisse der Schleife nicht zurückgeben müssen.

YueScriptCompiler

Compiler wird geladen…