制御構造って何?
制御構造っていうのは
条件を指示してその条件によって実行させたい動作を変える構造のことを言うんだ
この条件っていうのは人間が普段物事を判断するのと同じで
「このスイカ200円だったら買ってもいいな」
「タバコがあと3本しか無いから買っておくか」
「次の電車が来るまで30分はあるからコンビニに寄ってこよう」
こんな具合にそれぞれ
『200円だったら…』
『3本以下しか無い…』
『30分以上かかる…』
といった条件を満たしている時だけ
それぞれに決められた動作をさせられることができるんだ
LSLでは次の制御構文が用意されてるからそれぞれの動作を説明しようと思う
if
while
for
if
if(条件式){
処理
}
もしも 『条件式』が正しいなら 『処理』を動作させる
といった感じで動く
LSLの条件で言う”正しい”っていうのは
『0以外の数』または『中身がある文字列』のことを言っていて
2 -> 正しい
0 -> 正しくない
-2 -> 正しい
ってことなんだ
つまり
if(5){
処理
}
や
if(-2){
処理
}
と書くと処理の内容は実行されることになる
ちなみにここで書いてる正しいっていうのは世間で
正・TRUE・1
って言われてる
正しくないっていうのは
負・FALSE・0
てかんじ
default{
state_entry(){
integer a = 1;
if(a == 0){
//ここは実行されない!
llOwnerSay("hahaha");
}
if(a == 1){
//ここは実行される!
llOwnerSay("hehehe");
}
}
}
いきなり出てきたこの記号
a == 1
↑何この記号?ふざけてんの!
この部分は "aの中身は1と等しいか?" という判断をしてるんだけど
これの説明は↓で
算術論理演算子
if文の便利な点(?)は
この条件が間違っていた時の処理も書いておけるんだ
integer a = 1;
if(a == 0){
処理1
}else{
処理2
}
この例だと
if(a == 0){
aの中身(1)と0は一致しないので処理1は実行されない
後に続くelseってやつは
直前に置いてあるifが実行されなかった時に実行される
つまりa == 0が正しくない時に実行されるということ
この文だと処理2のみ実行される
変数aの中身が1なら処理1を実行
変数aの中身が2なら処理2を実行
変数aの中身が3なら処理3を実行
こうしたい場合はもうわかるよな
if(a == 1){
処理1
}
if(a == 2){
処理2
}
if(a == 3){
処理3
}
こう書くことでaの内容によって実行する処理を変えられるんだ
だけどaが1と等しいということがわかってんなら
a == 2とa == 3を確認するまでも無いはず
ここで便利なのがif-elseif構文
if(a == 1){
処理1
}else if(a == 2){
処理2
}else if(a == 3){
処理3
}
こう書くことで
- aが1なら処理1を実行
- aが1でなくて2なら処理2を実行
- aが1でも2でもなくて3なら処理3を実行
という動きをさせることができる
どう違うのかというと
a == 1を比べて正しいなら
パソコンはa == 2もa == 3も比べないってこと
処理軽減にも繋がって複雑な処理をややこしくしないためにもなるんだ
integer a = 1;
integer b = 1;
if(a == 1){
処理1
}else if(b == 1){
処理2
}
こう書くと処理1だけ実行されるけど
integer a = 1;
integer b = 1;
if(a == 1){
処理1
}
if(b == 1){
処理2
}
こう書くと処理1も処理2も実行されるって違いだな
while文
while(条件){
処理
}
条件を満たしている限り処理を繰り返す
つまりこういうこと
- 条件が合ってないならここでwhile文終了
- 処理を実行
- 1へ
こういった繰り返しの処理のことを反復処理といって
この繰り返しから抜け出せるようにする処理を中に書いておかないと
俗に言う無限ループっていう状態になるんだ
無限ループって怖いよな
雛見沢は怖いけどいつも行ける機会を窺ってます><;
do-while文
do{
処理
}while(条件);
これはwhile文に似てるけど少し違う
while文は始めてこのwhileに来たときに条件を満たしてなかったら
処理は1度も実行されないけど
このdo-while文の場合は
- 処理を実行
- 条件が合ってないならここでwhile文終了
- 1へ
といった感じに
始めに一回処理を勝手に実行される
for文
if( 始めの処理 ; 条件式 ; 繰り返し処理 ){
処理
}
これが結構ややこしいんだけどとりあえず処理のされかたを見てくれ
- はじめの処理を実行
- 条件式があってないならfor文終了
- 処理を実行
- 繰り返し処理を実行
- 2へ
といった感じ
なんだかわけがわからないと思うから例を出してみると
integer i;
if( i = 0 ; i < 5 ; i = i + 1 ){
llOwnerSay( (string) i );
}
この処理の場合・・・
- for文に入る前に変数iを作っておく
- iに0を入れる
- i < 5を比べる あってなかったらfor分を抜ける
- iの内容を画面に表示
- iに1を足す
- 3へ
といった感じで動く
画面に表示された文字は以下の通り
0
1
2
3
4
ここでアレ?と思うのが
『それならwhile文の処理の書き方で同じ動作させられるんじゃね?』
ってこと
その通りなんです><;
自分の好きな方を選んでね><