Die for Schleife wird verwendet um Anweisungen wiederholt auszuführen, solange eine Bedingung wahr ist. Zusätzlich wird eine spezielle Zeile Code nach jedem Durchlauf ausgeführt.
Meistens wird damit abhängig von einem Counter eine bestimmte Anzahl an Durchläufen durchgeführt, während nach jedem Durchlauf der Counter erhöht wird.
Format:
Die initialisierung und update sind einfache LSL-Anweisungen. Test ist jede LSL-Anweisung die einen Integer-Wert zurück gibt.
Beispiel:
Dieser Code gibt jedes Element der Auflistung Dingsies auf dem Chatkanal 0 aus.
Um Anweisungen von 0 beginnend bis max -1 auszuführen:
Um Anweisungen von 1 beginnend bis max auszuführen:
Um Anweisungen beginnend mit max, abwärtszählend bis 1 auszuführen.
Anmerkung: test wird nach jedem Durchlauf der Schleife ausgeführt. Wenn diese Werte erst durch Funktionsaufrufe ermittelt, aber durch den Anweisungsblock nicht beeinflusst werden, sollte die Ermittlung lieber einmal vor der Schleife durchgeführt werden um Ressourcen zu sparen.
Deshalb statt dem hier:
lieber das hier:
Jede for Schleife kann auch als while Schleife geschrieben werden
Auch hier wird die Initialisierung in jedem Fall ausgeführt. Anschliesend wird bei jedem Durchlauf der Schleife die Bedingung abgefragt. Liefert die Bedinung FALSE, wird die Schleife unterbrochen.
For Schleifen und while Schleifen sind syntaktisch gleichbedeutend (das Ergebnis ist das selbe). Traditionell wird allerdings die for Schleife verwendet um einen Anweisungsblock eine bestimmte Anzahl Wiederholungen auszuführen (z.B. um eine Liste abzuarbeiten oder einmal für jedes Ergebnis eines Sensors). While Schleifen werden dagegen verwendet wenn die Bedingung nicht zwangläufig abhängig von der Anzahl an Durchläufen ist (z.B. auf etwas warten).
Die Freiheiten von LSL lassen viel Raum für Kuriositäten. So ist es zwar löblich, seinen Code möglichst kompakt zu halten, allerdings geht dies of zu Lasten der Lesbarkeit.
Obiges Beispiel könnte man z.B. folgendermaßen schreiben:
Blödes Beispiel:
Solchen Verlockungen sollte nicht nachgegeben werden. Der Code wird dadurch nur schwer lesbar. Hinzu kommt, dass bei obigem Beispiel die Funktion llGetListLength() unnötigerweise bei jedem Schleifendurchlauf ausgeführt wird.
besseres Beispiel:
Unheimlich blödes Beispiel: