フロー制御

なにやら難しそうなタイトルですが、簡単に言えば「プログラムの流れ制御」です。
ここで扱うのは繰り返しです。
時には、同じ内容を何度も繰り返したい事があります。
そういう時は単純に内容をコピーすれば済む訳ですが、もし内容を変えたくなった時には、全部修正しなければならないので大変です。
もちろんミスも多くなりますし、見た目にも良くないし、ひょっとするとスクリプトの容量をオーバーしてしまう事もあります。
そういう時に便利なのが繰り返しのフロー制御です。
フロー制御には以下のものがあります。

if

if( 演算式 )
{
    内容 ;
}
else
{
    内容 ;
}

実はif はフロー制御の仲間です。
繰り返しとは意味合いが異なるので別に書きました。
まぁこれについては説明したのでパス(笑)。

while

while( 演算式 )
{
    内容 ;
}

whileは、演算式が正しい場合に延々と繰り返す処理です。

integer X;
while( X < 10 )
{
    llSay(0, "おはよう" );
    X++;
}

これはXが0から9になるまでずっとXに1を足し続けます。
Xが10になった時点(Xが10未満ではなくなる=演算が正しくなくなる)で内容をスキップしてループを抜けます。
結果、おはようを10回言います。

do while

do
{
    内容 ;
}
while(演算式) ;

上のwhileをひっくり返したような書き方です。
do whilewhile とほぼ同じですが、まず内容を1回行ってから演算をする点が違います。

integr X;
do
{
    llSay( 0, "おやすみ" );
    X++;
}
while( X < 10 );

同じくおやすみを10回言います。
Xは1から始まり、Xが10になった時点(Xが10未満ではなくなる=演算が正しくなくなる)でループを終了します。
whileでは11回目をスキップするので10回、do whileでは10回目でループを抜けるので10回なのです。
実のところ、理屈は解っていても、この2つをどう使い分ければいいのか良く解りません。
どちらにも言える事は、X++; これを忘れると無限ループに陥るという事です。
また、比較演算なのでうっかり( X = 10 ) と書いても無限ループになります。
( X == 10 ) と書きましょう。
この場合は初めから演算が正しくないため、whileでは一度も内容を実行せずに、do whileでは一回だけ実行して終わります。

for

for( 初期化; 演算式; 更新処理 )
{
    内容 ;
}

繰り返しで、一番使い勝手が良いのがこのforです。
while では内容中に書いていた更新処理が、for の中に組み込まれているため、無限ループに陥りにくくなります。
また表記自体もスッキリします。

integer i;
for( i = 0; i < 10; i++ )
{
    llSay( 0, "こんにちわ" );
}

こんにちわを10回言います。
上記の二つに比べても、繰り返し処理をしている部分が解りやすいですね。
繰り返しのフロー制御では、回数を判定するために変数が一つ必要です。
ただ、これは内容に組み込むことができます。

integer i;
for( i = 0; i < 10; i++ )
{
    llSay( 0, (string) i );
}

0から9までの数字をしゃべったと思います。
これは例えば、list 変数の中身を使いたい時に重宝します。
list 変数は、その中身に左から順に0、1、2、3と数字が振られています。
つまり、listの0番目、listの1番目という具合にfor 文を使って取り出せる訳です。

list str = ["これは","リストから","取り出す","テストです"];

default
{
    state_entry()
    {
        integer i;
        integer list_num;
        list_num = llGetListLength(str);
        for( i = 0; i < list_num; i++ )
        {
            llSay( 0, llList2String(str, i));
        }
    }
}

list変数strの中身を連続で取り出してしゃべります。
LSLではfor 文が使えれば、繰り返しで困る事はそんなにありません。

さて、このフロー制御までで、基礎編は一応終わりです。
この後は、各イベントと関数の使い方を、実践編で解説していきます。
結局のところ、イベントや関数の違いがあるだけで、スクリプトは基礎編で学んだ事をどう組み合わせるか、という事だけです。
よっぽど難しいものでなければ、これまでの内容だけでも十分です。
スクリプトは怖くありません。
使えるようになればなるほど楽しいものです。
頑張りましょうね。