User talk:Toady Nakamura

From Second Life Wiki
Revision as of 13:40, 5 November 2012 by Kireji Haiku (talk | contribs) (reply with a lengthy explanation of how to deal with lists in LSL)
Jump to navigation Jump to search

Leave me a message !!! Toady Nakamura 23:44, 5 July 2012 (PDT)

<lsl> //Counts down from 5 to 1, then can do something else default {

   state_entry()
   {
       integer count = 5;
       do
       {
           llSay(0, (string)count);
       //  wait a sec
           llSleep(1.0);
       }
       while (--index);

       llWhisper(0, "I am done counting now.");
   }

} </lsl>

Debug error

Um I am sorry if I am going about this the wrong way but from what I can tell this was the only way to talk on the wiki and I had a question about the LSL 101 Logic page, the example script in particular, I copied it(sort of, I actually typed it out because of the note at the bottom) in the LSLEditor community edition and ran the debug... thing, and got the error "Field 'n' is never assigned to, and will always have its default value"

I was wondering if this was an actual issue, and I wonder this because I have no actual coding knowledge. I apologize profusely if I have the wrong person or posted this where I shouldn't have. If you would like to see how it came out exactly I will of course provide what was written.

--Rohise Resident 22:56, 9 October 2012 (PDT)

Variable names

Greetings, I rewrote your example script on User:Toady_Nakamura/Simple_Recording_Tipjar. For sake of readability, please use variable names that actually mean something amd not i, m, n and what not. Your doing yourself a favor by doing so! -- Kireji Haiku 11:18, 19 October 2012 (PDT)

I replied on your talk page, as is customary. You did not reply and you wiped out my reply to you. Toady Nakamura 10:07, 4 November 2012 (PST)

Regarding your question about lists in LSL on User_talk:Strife Onizuka 's page:

Usual list with 10 items:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]; </lsl>

Then start with a for-loop:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

integer index = 0; for (index = 0;index < llGetListLength(listOfTenItems);index++) {

   //do something

} </lsl>

Resetting the value to 0 for index was redundant so we can skip that:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

integer index = 0; for (;index < llGetListLength(listOfTenItems);index++) {

   //do something

} </lsl>

Setting the default value to 0 is redundant, too.

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

integer index; for (;index < llGetListLength(listOfTenItems);index++) {

   //do something

} </lsl>


Calculating the list length every step is redundant too because the length doesn't change.

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]; integer lengthOfList = llGetListLength(listOfTenItems);

integer index = 0; for (;index < lengthOfList;index++) {

   //do something

} </lsl>

Now the index for items in a list of ten is either:

 0,  1,  2,  3,  4,  5,  6,  7,  8,  9

//  or

-10, -9, -8, -7, -6, -5, -4, -3, -2, -1

Because ++index is faster than index++ we could start with -11 and increment first before doing something, instead of the other way around before... as long as the index stays negative. We can write:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]; integer lengthOfList = llGetListLength(listOfTenItems);

integer index = -lengthOfList - 1; for (;index < 0;++index) {

   //do something

} </lsl>

Now trying to simplify the math for calculating the index default value we can use bitwise-NOT of the length which is the same as the negative length minus one:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]; integer lengthOfList = llGetListLength(listOfTenItems);

// it's bitwise-NOT (~) not minus (-) integer index = ~lengthOfList; for (;index < 0;++index) {

   //do something

} </lsl>

as you might have seen by now, we can merge two lines in the middle:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

// it's bitwise-NOT (~) not minus (-) integer index = ~llGetListLength(listOfTenItems); for (;index < 0;++index) {

   //do something

} </lsl>

and because index should have a negative value while looping and the loop stops when index reaches zero, we can change the code to:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

// it's bitwise-NOT (~) not minus (-) integer index = ~llGetListLength(listOfTenItems); for (;index;++index) {

   //do something

} </lsl>

and improve readability by using a while-loop:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

// it's bitwise-NOT (~) not minus (-) integer index = ~llGetListLength(listOfTenItems); while (++index) {

   //do something

} </lsl>

and try to get rid of the bitwise-NOT because some people find it hard to read. The positive side effect of the next step is that you need to increment one step less in total and the loop runs the first step directly without checking first for a conditional statement:

<lsl> list listOfTenItems = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];

// negative length now! integer index = -llGetListLength(listOfTenItems);

do {

   //do something

} while (++index); </lsl>

Hope it helps, kind regards. -- Kireji Haiku 12:40, 5 November 2012 (PST)