Difference between revisions of "NULL KEY"

From Second Life Wiki
Jump to navigation Jump to search
Line 6: Line 6:


Despite fitting the syntax criteria to be a valid [[key]], when fed to a {{LSLGC|Conditional}} as a key it executes as false.
Despite fitting the syntax criteria to be a valid [[key]], when fed to a {{LSLGC|Conditional}} as a key it executes as false.
Some people say that in most applications NULL_KEY isn't needed, and that an empty string ( "" ) will suffice. Others say that doing so is bad style, can cause hard-to-track-down bugs in your script, and might be unsupported in future code releases.
Not that that NULL_KEY does not actually equal "".
See this example:
key tmp = "";<br />
if (tmp != NULL_KEY) llSay(0, "See, NULL_KEY does not equal \"\"");<br />
|examples=
|examples=
<lsl>
<lsl>integer isKey(key in) {
integer isKey(key in) {
     if(in) return 2;
     if(in) return 2;
     return (in == NULL_KEY);
     return (in == NULL_KEY);
}//returns 2 if it's a valid key, 1 if it's NULL_KEY
}//returns 2 if it's a valid key, 1 if it's NULL_KEY</lsl>
</lsl>
|notes=In most situations NULL_KEY isn't needed; an empty string ("") will suffice. To take advantage of this certain practices have to be avoided. In many applications keys are checked against NULL_KEY and that is used to assume if they are valid; this is a bad practice. LSL makes it easy to check if a key is valid, all that is required is to use it as the parameter for a conditional. So instead of <code>if(uuid != NULL_KEY)</code> use <code>if(uuid)</code>, it will only return true if it is a valid key that is not NULL_KEY.
 
|notes=test
|functions=
|functions=
{{LSL DefineRow||[[llAvatarOnSitTarget]]|}}
{{LSL DefineRow||[[llAvatarOnSitTarget]]|}}

Revision as of 07:48, 8 July 2008

Description

Constant: string NULL_KEY = "00000000-0000-0000-0000-000000000000";

The string constant NULL_KEY has the value "00000000-0000-0000-0000-000000000000"

While technically a string constant, it is only useful as a key.

Despite fitting the syntax criteria to be a valid key, when fed to a Conditional as a key it executes as false.

Related Articles

Functions

•  llAvatarOnSitTarget
•  llDetectedKey
•  llGetNotecardLine
•  llGetLandOwnerAt
•  llGetPermissionsKey
•  llGetTexture
•  llListen

Events

•  attach

Examples

<lsl>integer isKey(key in) {

   if(in) return 2;
   return (in == NULL_KEY);

}//returns 2 if it's a valid key, 1 if it's NULL_KEY</lsl>

Notes

Like any LSO string constants longer then 3 characters and used in multiple places in the code, they should be stored in a global variable. The result will be a considerable memory savings. This does not apply to scripts compiled with Mono. See LSL Constants vs Globals for more information about this and examples.
In most situations NULL_KEY isn't needed; an empty string ("") will suffice. To take advantage of this certain practices have to be avoided. In many applications keys are checked against NULL_KEY and that is used to assume if they are valid; this is a bad practice. LSL makes it easy to check if a key is valid, all that is required is to use it as the parameter for a conditional. So instead of if(uuid != NULL_KEY) use if(uuid), it will only return true if it is a valid key that is not NULL_KEY.

Deep Notes

Search JIRA for related Issues

Signature

string NULL_KEY = "00000000-0000-0000-0000-000000000000";