Difference between revisions of "For/ja"

From Second Life Wiki
< For
Jump to navigation Jump to search
m
 
Line 12: Line 12:
|spec
|spec
|caveats
|caveats
|examples=<pre>//シングルステートメントの場合
|examples=
以下は、forループが最も一般的に記述される方法で、各部分が適切に指定されています。
 
このループは0から9までの10回実行されます。各繰り返しで2つの文が実行されます。
<source lang="lsl2">
integer a = 0;
integer a = 0;
integer b = 10;
integer b = 10;
for(; a < b; ++a)
for (a = 0; a < b; ++a)
     llOwnerSay((string)a);
{
</pre>
     llOwnerSay( (string)a ); // first statement
<pre>//ブロックステートメントの場合
    llOwnerSay( (string)b ); // second statement
}
</source>
 
次のものは一般的ではなく、中括弧が省略されている場合です。
 
これは、ループ中に1つの文のみを実行する必要がある場合に使用できます。
<source lang="lsl2">
integer a = 0;
integer a = 0;
integer b = 10;
integer b = 10;
for(; a < b; ++a)
for (a = 0; a < b; ++a)
{
     llOwnerSay( (string)a ); // single statement
     llOwnerSay((string)a);
</source>
    llOwnerSay((string)a);
 
}
次のコードは技術的には可能ですが、読みやすさと保守性が低下するため、お勧めしません。
</pre>
 
<pre>//空のステートメントの場合
初期化部分は省略されています。なぜなら、変数<code>a</code>はすでにゼロの値を持っているからです。
 
ループ本体も省略されています。なぜなら、増分ステートメントには必要なすべての操作が含まれているためです。
<source lang="lsl2">
integer a = 0;
integer a = 0;
integer b = 10;
integer b = 10;
for(; a < b; llOwnerSay((string)(a++)));
for ( ; a < b; llOwnerSay((string)(++a)) )
</pre>
    ; // empty statement (could be at the end of the previous line)
</source>
|helpers
|helpers
|also_header
|also_header

Latest revision as of 08:34, 26 September 2023

for( 初期化; 条件式; 増分処理ループ

•  初期化 条件式をチェックする前に一度だけ実行されます。
•  条件式 この文の実行結果が真のときはループが実行されます。
•  増分処理 ループの後に実行され, その後で条件式が再びチェックされます。
•  ループ シングルステートメントか、ブロックステートメントか、空のステートメントのいずれかにできます。


いずれのステートメントも空欄にできます。

詳細

条件の種類
条件
integer 0ではない場合は真。
float 0ではない場合は真。
string 文字列の長さが0ではない場合は真。
key keyが有効でNULL_KEYではない場合のみ真。
vector vectorがZERO_VECTORではない場合は真。
rotation rotationがZERO_ROTATIONではない場合は真。
list listの長さが0ではない場合は真。正しい動作は、Monoでコンパイルされたスクリプトのみで見られ、LSOでコンパイルされたスクリプトは誤って false になります。BUG-230728


以下は、forループが最も一般的に記述される方法で、各部分が適切に指定されています。

このループは0から9までの10回実行されます。各繰り返しで2つの文が実行されます。

integer a = 0;
integer b = 10;
for (a = 0; a < b; ++a)
{
    llOwnerSay( (string)a ); // first statement
    llOwnerSay( (string)b ); // second statement
}

次のものは一般的ではなく、中括弧が省略されている場合です。

これは、ループ中に1つの文のみを実行する必要がある場合に使用できます。

integer a = 0;
integer b = 10;
for (a = 0; a < b; ++a)
    llOwnerSay( (string)a ); // single statement

次のコードは技術的には可能ですが、読みやすさと保守性が低下するため、お勧めしません。

初期化部分は省略されています。なぜなら、変数aはすでにゼロの値を持っているからです。

ループ本体も省略されています。なぜなら、増分ステートメントには必要なすべての操作が含まれているためです。

integer a = 0;
integer b = 10;
for ( ; a < b; llOwnerSay((string)(++a)) )
    ; // empty statement (could be at the end of the previous line)

ノート

forループは下記のwhileループと同じです。

初期化;
while(条件式)
{
    ループ;
    増分処理;
}