Difference between revisions of "LSL 101/Variable Initialization"

From Second Life Wiki
Jump to navigation Jump to search
m (editing... see discussion)
Line 1: Line 1:
[[Category:LSL 101]]
[[Category:LSL 101]]
{{NavNextPrev|prev=Global vs Local Variables|next=Event Handler Parameters}}
{{NavNextPrev|prev=Global vs Local Variables|next=Event Handler Parameters}}
{{LSL Wikibook Index}}


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.
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.
Line 52: Line 53:
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.
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.


Now that we're discussed local variables and initialization, we can explain [[LSL 101/Event Handler Parameters|event handler parameters]], which we put off explaining when they first appeared.
Continue this tutorial at [[LSL 101/Functions|Functions]] or go back to [[LSL 101/Global vs Local Variables| Global vs Local Variables]].

Revision as of 18:11, 7 July 2012

← Global vs Local Variables ↑̲  LSL 101  ̲↑ Event Handler Parameters →

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 example 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.