If

From Second Life Wiki
Jump to navigation Jump to search

if ( condition ) branch

•  condition If this executes as true then branch is executed.
•  branch Can be either a single statement, a block statement, or a null statement.

|

if ( condition ) branch_true else branch_false

•  condition If this executes as true then branch is executed.
•  branch_true Can be either a single statement, a block statement, or a null statement.
•  branch_false Can be either a single statement, a block statement, or a null statement.

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

Watch out for misplaced semicolons. They can, and will, cause strange things to happen. For instance: If you place a semicolon between an if statement and a code block, the if statement will not control the execution of the block.

if (a == "Loren");
{
    llSay(0, "Lorem ipsum sic amet!");
}

This code will execute in the following order:

  1. The line if (a == "Loren"); will execute; the semicolon will tell LSL that this is a simple inline if statement.
  2. Next it meets the start of the code block and will execute the contents, in this case saying "Lorem ipsum sic amet!", no matter what the outcome of the above if statement.

Another problem happens when someone forgets to use the curly braces.

if (a == "Loren")
    llSay(0, "Lorem ipsum sic amet!");
    llSay(0, "I don't know what it means either...");

The assumption is that because the indentation makes it "look" like both llSay commands are controlled by the if statement, that they are. In fact, if a was equal to "Joe" then all that would be said is "I don't know what it means either..."

Examples

Simple inline if statement:

if (a == 1) c = b;

Simple block if statement:

if (a == 1)
{
    // Do something here.
}

Compounded if statement:

if (a == 1 && b == c)
{
    // more here.
}

Nested if statements:

if (a == 1)
{
    if (b == c)
    {
        // more here.
    }
}

For more complex examples see: if else

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.