For

From Second Life Wiki
(Redirected from LSL for)
Jump to navigation Jump to search

for( initializer; condition; incrementloop

•  initializer Executed once just before checking condition.
•  condition If this executes as true then loop is executed.
•  increment Executed after loop, then condition is checked again.
•  loop Can be either a single statement, a block statement, or a null statement.


Only the condition is required. The initializer, increment, and loop body are optional and can be left empty.

Specification

Conditional Types
Type Condition
integer True if it is not zero.
float True if it is not zero.[1]
string True if its length is not zero.
key True only if it is a valid key and not NULL_KEY.
vector True if the vector is not ZERO_VECTOR.
rotation True if the rotation is not ZERO_ROTATION.
list True if the length is not zero. Note that correct behavior is only seen with Mono-compiled scripts; LSO-compiled scripts incorrectly resolve to false if the list is non-empty: BUG-230728

Examples

The following is the most common way a for-loop is written, with each part properly specified.

The loop will run or "iterate" 10 times, from 0 to 9. It will execute two statements each iteration.

integer a = 0;
integer b = 10;
for (a = 0; a < b; ++a)
{
    llOwnerSay( (string)a ); // first statement
    llOwnerSay( (string)b ); // second statement
}

The following is less common, where the curly braces are left out.

This can be used when only one statement needs to be executed during the loop.

integer a = 0;
integer b = 10;
for (a = 0; a < b; ++a)
    llOwnerSay( (string)a ); // single statement

Although the following is technically possible, it's not recommended because it's hard to read and maintain.

The initialization is left out because the variable a already has the value zero.

The loop body is left out because the increment statement includes a function call which does everything that's needed.

integer a = 0;
integer b = 10;
for ( ; a < b; llOwnerSay((string)(++a)) )
    ; // empty statement (could be at the end of the previous line)

Notes

A for-loop can also be written as a While-loop.

initializer;
while(condition)
{
    loop;
    increment;
}

Deep Notes

Search JIRA for related Issues

Footnotes

  1. ^ The OpenSim LSL compiler will not do this implicitly. You will need to use an explicit check.