Skip to content
lsl.devlsl.devLSL Dev

Do while

LSL Conditional: {{LSL_Conditional |statement=do while |statement_header |statement_desc=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. (However, the speed increase and byte difference does not apply to scripts compiled in Mono) |statement_title=do {{LSL Param|loop}} while ({{LSL Param|condition}}); |p1_name=loop |p2_name=condition |constants |spec |caveats |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 at first iteration
        while (++olf < 5);            // Increments then does the while-test
    }
}
//Counts from 0 to 4 and comments as it loops (block statement demo)
default
{
    state_entry()
    {
        integer olf;
        do
        {   // Curly brackets are required since there is more than one statement within the do-loop
            llSay(0, (string)olf);    
            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
        {   
            // --num decrements num before using it to pick up a detected avatar's name. Thus we retrieve #11 through #0
            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
    }
|helpers |also_header |also_functions |also_tests |also_articles |also_footer |notes |mode |deprecated |cat1=Conditional |cat2 |cat3 |cat4 }}
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.

From the Second Life Wiki

Community documentation adapted from Do while, by Linden Research, Inc. and contributing residents.View contributors and history.

Imported wiki revision:

Licensed under CC BY-SA 3.0. Last wiki edit: .Formatting and links have been adapted for this site; API metadata follows the LSL definitions.