Difference between revisions of "If"

From Second Life Wiki
Jump to navigation Jump to search
(Added caveat about short circuiting)
Line 7: Line 7:
|p1_name=condition|p1_desc=If this executes as true then '''branch''' is executed.
|p1_name=condition|p1_desc=If this executes as true then '''branch''' is executed.
|spec
|spec
|caveats
|caveats=Operators in LSL are NOT short circuited. For example:
<pre>
// A simple method to say if the method was called.
integer test() {
    llOwnerSay("Test method called!");
   
    return TRUE;
}
 
default {
    touch_start(integer total_number) {
        if (FALSE && test()) { // If the test is short-circuit optimized then the test() method should never be called.
            // Will never get here.
        }
    }
}
</pre>
In a short-circuited language if the left-hand side of a logical AND (&&) is FALSE the right-hand side is never tested since the entire test would always return a FALSE output no matter what the value of the right-hand side. Since LSL is not short circuited, both the left and the right-hand sides are tested all the time.
This can be simulated by using a nested if structure:
<pre>
default {
    touch_start(integer total_number) {
        if (FALSE) {
            if (test()) {
              // Will never get here.
            }
        }
    }
}
</pre>
|examples
|examples
|helpers
|helpers

Revision as of 00:28, 6 March 2007

if( conditionbranch

•  condition If this executes as true then branch is executed.
•  branch 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

Examples

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.