Difference between revisions of "Do while"
Jump to navigation
Jump to search
Search JIRA for related Issues
(Removed div styling to reduce width of entry and to maintain continuity and added a few notes to old examples.) |
|||
Line 4: | Line 4: | ||
|statement=do while | |statement=do while | ||
|statement_header | |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. | |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, this does not apply to scripts compiled in Mono) | ||
|statement_title=do {{LSL Param|loop}} while ({{LSL Param|condition}}); | |statement_title=do {{LSL Param|loop}} while ({{LSL Param|condition}}); | ||
|p1_name=loop | |p1_name=loop |
Revision as of 19:27, 18 September 2010
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
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. (However, this does not apply to scripts compiled in Mono)
Specification
Type | Condition |
---|---|
integer | True if it is not zero. |
float | True if it is not zero.[1] |
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. Note that correct behavior is only seen with Mono-compiled scripts; LSO-compiled scripts incorrectly resolve to false if the list is non-empty: BUG-230728 |
Examples
<lsl>//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 }
}</lsl><lsl>//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. }
}</lsl><lsl>//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); }
}</lsl><lsl> //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 }
</lsl>
Deep Notes
Footnotes
- ^ The OpenSim LSL compiler will not do this implicitly. You will need to use an explicit check.