Do while

From Second Life Wiki

Second Life Wiki > Do while (Redirected from Do-while)
Jump to: navigation, search

Template:Needs Translation/LSL/de Template:Needs Translation/LSL/es Template:Needs Translation/LSL/el Template:Needs Translation/LSL/he Template:Needs Translation/LSL/it Template:Needs Translation/LSL/ko Template:Needs Translation/LSL/nl Template:Needs Translation/LSL/hu Template:Needs Translation/LSL/no Template:Needs Translation/LSL/da Template:Needs Translation/LSL/sv Template:Needs Translation/LSL/tr Template:Needs Translation/LSL/pl Template:Needs Translation/LSL/pt Template:Needs Translation/LSL/ru Template:Needs Translation/LSL/uk Template:Needs Translation/LSL/zh-Hans Template:Needs Translation/LSL/zh-Hant

do loop while (condition);

•  loop Executes once, then executes condition.
•  condition If condition executes true, it then loops back and executes loop again.


Any of the statements can be null statements. A do...while loop is slightly faster than a while or for loop, and requires fewer bytes of memory than a while or for loop.

Specification

Conditional Types
Type Condition
integer True if it is not zero.
float True if it is not zero.
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.


Examples

//Counts from 1 to 5
default
{
    state_entry()
    {
        integer olf;// Without applied value an integer will be defaulted to zero.
        do
            llSay(0, (string) (++olf));// Increment before the while condition.
        while(olf<5);                  // On the first pass/loop olf = 1
    }
}
//Counts from 0 to 4
default
{
    state_entry()
    {
        integer olf;
        do
            llSay(0, (string)olf);// olf is still equal to zero.
        while((++olf)<5);// Increment after/during the test.
    }
}
//Counts from 0 to 4 and coments as it loops (block statement demo)
default
{
    state_entry()
    {
        integer olf;
        do
        {
            llSay(0, (string)olf);// Curly brackets are required since there is more than one looped command.
            llSay(0, "looping");
        }
        while((++olf)<5);
    }
}
 
//Practical example of where a do/while loop is more immediately useful than a while loop:
//Note that a sensor event always contains input data, so the 'do' always has something to process
    sensor(integer num)
    {   if(num>12)
            num=12;
        do
        {   gNameList += [llGetSubString(llDetectedName(--num),0,23)];//sometimes avatar names are too long for dialog display
            gKeyList +=  [llDetectedKey(num)];//we will dialog select avatar by name, but still need their key
                                              //even if their name has not been truncated above
        }while(num>0);
        llDialog(llGetOwner(),"Choose an avatar.",gNameList,gDlgChan);//channel is pre-defined when llSensor is triggered
    }
 
Personal tools
In other languages