LSL 101/Variable Initialization

From Second Life Wiki
< LSL 101
Revision as of 19:04, 11 June 2013 by Andante Darkstone (talk | contribs) (Changed "and most example you see will probably do that" to "and most example**s** you see will probably do that")
Jump to navigation Jump to search
← Global vs Local Variables ↑̲  LSL 101  ̲↑ Functions →

When a variable declaration is executed, the variable always gets some initial value, whether or not our script specifies. This is called variable initialization, and it deserves a little discussion of its own. So far, we have passed over this detail by always executing an assignment statement for the variable prior to using it. But consider this example.

<lsl>string RegionName; // This is a global variable

default {

    state_entry()
    {
         // Store the name of the current sim for later use
         RegionName = llGetRegionName();
    }

    touch_start( integer num_detected )
    {
         // Announce the region where the script is running
         string WelcomePhrase = "Welcome to " + RegionName  + ".";
         llOwnerSay( WelcomePhrase );
    }

}</lsl>

The only difference between the previous example and this one is that we have replaced the two lines

<lsl> string WelcomePhrase

WelcomePhrase = "Welcome to " + RegionName  + ".";</lsl>

with the single line

<lsl> string WelcomePhrase = "Welcome to " + RegionName + ".";</lsl>

The first version allocates the variable and initializes it with the string containing no characters (written as ""). Then, it updates the variable with the string "Welcome to Ganymede.".

The second version both declares the variable and initializes it with the value "Welcome to Ganymede." in the same statement. The syntax for this is easy to remember because it is written as though the declaration and assignment statements were rolled into one. But keep in mind that this is not simply another form of an assignment statement. For example, the following code fragment is not legal.

<lsl> string WelcomePhrase = "Welcome to " + RegionName;

string WelcomePhrase = WelcomePhrase + ".";</lsl>

It is not legal because the second statement is an attempt to declare a variable that already exists, and isn't allowed.

Any declaration of a local variable can be followed by the assignment symbol and an initialization expression that follows the same form as an assignment statement. As a matter of fact, providing an initial value is generally considered a good practice, and most examples you see will probably do that.

However, the rules for initializing a global variable are different. Global variables can have a initializer, but it can only be a simple value. It can't be the result of a built-in function and can't have any operators. This, we could not change our global variable declaration to

<lsl>string RegionName = llGetRegionName(); // This is a global variable</lsl>

On the other hand, we could do this:

<lsl>string RegionName = "Region not known"; // This is a global variable</lsl>

Initializing global variables to a unique value like this has an advantage over letting it be compiled with the empty string. When testing your script, if the phrase "Region not known" appears in the output where you expected a region name, you'll immediately know that no assignment to that variable was ever executed. If, on the other hand, the region name was simply missing (i.e. the empty string), it might be less obvious where things went wrong.

Continue this tutorial at Functions or go back to Global vs Local Variables.