Difference between revisions of "LSL 演算子"

From Second Life Wiki
Jump to navigation Jump to search
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Multi-lang}}
{{Multi-lang|1=LSL_Operators|2=/ja}}
{{LSL Header/ja}}
{{LSL Header/ja}}
Operators are used to cause an operation (or mathematical action) to be performed on two operands. The easy and common example is 1 + 2 where 1 and 2 are operands, and the '''+''' is the operator.
演算子は、1個もしくは2個の被演算子に対して演算(もしくは数学的な作用)を実行するために用いられます。簡単で一般的な例として、1 + 2 の場合、1 と 2 が被演算子、 '''+''' が演算子です。


演算子は2つの被演算子の間で演算(もしくは数学的な作用)を実行するために用いられます。簡単で一般的な例として、1 + 2 の場合、1 と 2 が被演算子、 + が演算子です。
この概念は、被演算子に変数が利用できること(特殊な制約として代入演算子の左辺は変数でなければいけない)により、LSLでは大幅に拡張されました。
 
This concept can be extended much further with LSL since operands can be variables with the special case of the assignment operators requiring that the left hand side be a variable.
 
被演算子に変数が利用できること(特殊な例として代入演算子の左辺は変数でなければなりません)により、LSLの設計思想は大幅に拡張されました。


{| bgcolor="#FFFFFF" border="1"  cellspacing="2" cellpadding="6"
{| bgcolor="#FFFFFF" border="1"  cellspacing="2" cellpadding="6"
Line 17: Line 13:
| () []  . || 小カッコ(Parenthesis), 大カッコ(Brackets), ドット || do this second (do this first)
| () []  . || 小カッコ(Parenthesis), 大カッコ(Brackets), ドット || do this second (do this first)
|-
|-
| (''type'') || Typecasting || message = "The result is:" + (string) result;
| (''type'') || 型キャスト || message = "The result is:" + (string) result;
|-  
|-  
| ! ~ ++ --  || NOT, One's Complement, Increment, Decrement || counter++;   
| ! ~ ++ --  || 論理否定, ビット反転, インクリメント, デクリメント || counter++;   
|-
|-
| * / %  || 乗算/内積, 除算, 剰余/外積  || rollover = (count + 1)%5;
| * / %  || 乗算/内積, 除算, 剰余/外積  || rollover = (count + 1)%5;
Line 25: Line 21:
| -  ||  減算  || one = 3 - 2;
| -  ||  減算  || one = 3 - 2;
|-
|-
| + || Addition or joining Strings || two = 1+1;
| + || 加算 あるいは 文字列連結 || two = 1+1;
text = "Hello" + "World";
text = "Hello" + "World";
|-
|-
| + || Concatenation or joining Lists || myList = [1, 2, 3] + [4, 5];
| + || 配列の連結 || myList = [1, 2, 3] + [4, 5];
newList = oldList + addList;
newList = oldList + addList;
|-
|-
| << >>  || Left Shift, Right Shift || eight = 4 << 1;
| << >>  || 左シフト, 右シフト || eight = 4 << 1;
|-
|-
| < <= > >=  || Less Than, Less Than Or Equal To,
| < <= > >=  || 未満, 以下, より大きい , 以上
Greater Than, Greater Than or Equal To 
|| isFalse = (6 <= 4);
|| isFalse = (6 <= 4);
|-
|-
| ==  !=  || Comparison Equal, Comparison Not Equal || isFalse = ("this" == "that");
| ==  !=  || 等価比較, 不等価比較 || isFalse = ("this" == "that");
|-
|-
| &  || Bitwise AND  || zero = 4 & 2;
| &  || ビット演算 AND  || zero = 4 & 2;
four = 4 & 4;
four = 4 & 4;
|-
|-
| ^  || Bitwise XOR  || zero = 4 ^ 4;
| ^  || ビット演算 XOR  || zero = 4 ^ 4;
six = 4 ^ 2;
six = 4 ^ 2;
|-
|-
| <nowiki>|</nowiki>  || Bitwise OR  || four = 4 <nowiki>|</nowiki> 4;
| <nowiki>|</nowiki>  || ビット演算 OR  || four = 4 <nowiki>|</nowiki> 4;
six = 4 <nowiki>|</nowiki> 2;
six = 4 <nowiki>|</nowiki> 2;
|-
|-
| <nowiki>||</nowiki>  || Comparison OR  || isTrue = (FALSE <nowiki>||</nowiki> TRUE);
| <nowiki>||</nowiki>  || 条件比較 OR  || isTrue = (FALSE <nowiki>||</nowiki> TRUE);
|-
|-
| &&  ||Comparison AND  || isFalse = (FALSE && TRUE);
| &&  || 条件比較 AND  || isFalse = (FALSE && TRUE);
|-
|-
| = += -= *= /= %=  || Assignment || four = 4;
| = += -= *= /= %=  || 代入 || four = 4;
|}
|}


'''Note:''' 他の多くのプログラミング言語と異なり、C 言語風の '''&&''' および '''||''' という演算子は'''常に''' '''両方の'''被演算子を評価します。例えば、
<lsl>if (TRUE || 1/0) llSay( 0, "Aha!" );</lsl>
は "Aha!" と表示する前に Math Error (除算エラー) を起こします。
'''Note:''' ブーリアン演算子の優先順位は不明瞭です。式解析の優先順位に矛盾を生んだり、もしくは単純に '''||''' と '''&&''' の優先順位を同一と見なすかもしれない[http://jira.secondlife.com/browse/SVC-779 バグ]を含んでいるかもしれません。順位を明確にしたい場合は括弧 "()" で囲んでください。
'''Note:''' 条件文での評価は末尾から行なわれるようです。変数 x の値が 1 だった場合、以下の最初の二例は偽、最後の二例は真になります:


'''Note:''' The order of precedence of boolean operators is unclear. It is possible that there is a [http://jira.secondlife.com/browse/SVC-779 bug] in the expression parser, making precedence inconsistent, or it may simply be that '''||''' and '''&&''' have equal precedence; testing is inconclusive. Thus, when in doubt, parenthesize.
<lsl>(x && (x = 0) == 0 && x)</lsl>
<lsl>(x && (x = 0) == 0 && x == 0)</lsl>
<lsl>(x == 0 && (x = 0) == 0)</lsl>
<lsl>(x == 0 && (x = 0) == 0 && x)</lsl>


'''Note:''' ブーリアン演算子の優先順位は不明瞭です。
両辺の真偽に関わりなく、両辺とも評価されます。
式解析の優先順位に矛盾を生んだり、もしくは単純に '''||''' と '''&&''' の優先順位を同一と見なすかもしれない[http://jira.secondlife.com/browse/SVC-779 バグ]を含んでいるかもしれません。


{| {{Prettytable}}
{| {{Prettytable}}
Line 89: Line 95:
|string
|string
|string
|string
|Concatenates '''right''' onto the end of '''left'''.
|'''left''' の末尾に '''right''' を連結する
|-
|-
|list
|list
|*
|*
|list
|list
|Concatenates '''right''' onto the end of '''left'''.
|'''left''' の末尾に '''right''' を連結する
|-
|-
|*
|*
|list
|list
|list
|list
|Affixes '''left''' onto the start of '''right'''.
|'''left''' '''right''' の先頭に新しい配列要素として追加される。
|-
|-
|vector
|vector
|vector
|vector
|vector
|vector
|Adds '''left''' and '''right'''
|'''left''' '''right''' を加算する
|-
|-
|rotation
|rotation
|rotation
|rotation
|rotation
|rotation
|Adds '''left''' and '''right'''<br/>Not useful for combining rotations, use [[#* Operator|*]] or [[#/ Operator|/]] instead.
|'''left''' '''right''' を加算する<br/>あくまで演算例として。実際の回転の組み合わせでは [[#* Operator|*]] および [[#/ Operator|/]] を使ってください。
|}
 
{| {{Prettytable}}
|+
== 複合代入演算子{{Anchor|Shorthand Operators}} ==
単純代入演算子 '=' の代わりに、以下の方法を使えます:
|-{{Hl2}}
!単純代入演算子
!複合代入演算子
|-
|a = a + 1
|a += 1
|-
|a = a - 1
|a -= 1
|-
|a = a * (n+1)
|a *= (n+1)
|-
|a = a / (n+1)
|a /= (n+1)
|-
|a = a % b
|a %= b
|}
 
=={{Wikipedia|ド・モルガンの法則|ド・モルガンの法則|lang=ja}}==
{| {{Prettytable|style=margin-top:0; float:left;}}
|+ 等価であるビット演算
!AND
!OR
|-
|| <code>~(a & b)</code> || <code>~a &#124; ~b</code>
|-
|| <code>~a & ~b</code> || <code>~(a &#124; b)</code>
|-
| colspan="2" |
|-
|| <code>a & ~b</code> || <code>~(~a &#124; b)</code>
|-
|| <code>~(a & ~b)</code> || <code>~a &#124; b</code>
|-
|}
{| {{Prettytable|style=margin-top:0; float:left;}}
|+ 等価である論理演算
!AND
!OR
|-
|| <code>!(a && b)</code> || <code>!a &#124;&#124; !b</code>
|-
|| <code>!a && !b</code> || <code>!(a &#124;&#124; b)</code>
|-
| colspan="2" |
|-
|| <code>a && !b</code> || <code>!(!a &#124;&#124; b)</code>
|-
|| <code>!(a && !b)</code> || <code>!a &#124;&#124; b</code>
|-
|}
|}
{{Wikipedia|ド・モルガンの法則|ド・モルガンの法則|lang=ja}}により、各行とも '''AND''' 列にあるコードは '''OR''' 列のそれと論理的に等価です。'''a''' と '''b''' は変数である必要は無く、演算式でも構いません。ある種の状況では、コードを簡略化するためにこの手法が使えます。これらの 2 セットを混同しないことが大切です。上 2 行はド・モルガンの法則をそのとおりに表現したものであり、下 2 行はそれから導き出したものです。


{{LSLC||3={{#var:lang}}}}{{LSLC|Syntax/ja}}{{LSLC|Keywords/ja}}
{{LSLC/ja|}}{{LSLC/ja|Syntax}}{{LSLC/ja|Keywords}}

Latest revision as of 12:52, 7 April 2011

演算子は、1個もしくは2個の被演算子に対して演算(もしくは数学的な作用)を実行するために用いられます。簡単で一般的な例として、1 + 2 の場合、1 と 2 が被演算子、 + が演算子です。

この概念は、被演算子に変数が利用できること(特殊な制約として代入演算子の左辺は変数でなければいけない)により、LSLでは大幅に拡張されました。

演算子 説明 使用例
() [] . 小カッコ(Parenthesis), 大カッコ(Brackets), ドット do this second (do this first)
(type) 型キャスト message = "The result is:" + (string) result;
! ~ ++ -- 論理否定, ビット反転, インクリメント, デクリメント counter++;
* / % 乗算/内積, 除算, 剰余/外積 rollover = (count + 1)%5;
- 減算 one = 3 - 2;
+ 加算 あるいは 文字列連結 two = 1+1;

text = "Hello" + "World";

+ 配列の連結 myList = [1, 2, 3] + [4, 5];

newList = oldList + addList;

<< >> 左シフト, 右シフト eight = 4 << 1;
< <= > >= 未満, 以下, より大きい , 以上 isFalse = (6 <= 4);
==  != 等価比較, 不等価比較 isFalse = ("this" == "that");
& ビット演算 AND zero = 4 & 2;

four = 4 & 4;

^ ビット演算 XOR zero = 4 ^ 4;

six = 4 ^ 2;

| ビット演算 OR four = 4 | 4;

six = 4 | 2;

|| 条件比較 OR isTrue = (FALSE || TRUE);
&& 条件比較 AND isFalse = (FALSE && TRUE);
= += -= *= /= %= 代入 four = 4;

Note: 他の多くのプログラミング言語と異なり、C 言語風の && および || という演算子は常に 両方の被演算子を評価します。例えば、

<lsl>if (TRUE || 1/0) llSay( 0, "Aha!" );</lsl>

は "Aha!" と表示する前に Math Error (除算エラー) を起こします。

Note: ブーリアン演算子の優先順位は不明瞭です。式解析の優先順位に矛盾を生んだり、もしくは単純に ||&& の優先順位を同一と見なすかもしれないバグを含んでいるかもしれません。順位を明確にしたい場合は括弧 "()" で囲んでください。

Note: 条件文での評価は末尾から行なわれるようです。変数 x の値が 1 だった場合、以下の最初の二例は偽、最後の二例は真になります:

<lsl>(x && (x = 0) == 0 && x)</lsl> <lsl>(x && (x = 0) == 0 && x == 0)</lsl> <lsl>(x == 0 && (x = 0) == 0)</lsl> <lsl>(x == 0 && (x = 0) == 0 && x)</lsl>

両辺の真偽に関わりなく、両辺とも評価されます。

+ 演算子

result = left + right

Left の型 Right の型 Result の型 説明
integer integer integer leftright を加算する
integer float float leftright を加算する
float integer float leftright を加算する
string string string left の末尾に right を連結する
list * list left の末尾に right を連結する
* list list leftright の先頭に新しい配列要素として追加される。
vector vector vector leftright を加算する
rotation rotation rotation leftright を加算する
あくまで演算例として。実際の回転の組み合わせでは * および / を使ってください。

複合代入演算子

単純代入演算子 '=' の代わりに、以下の方法を使えます:

単純代入演算子 複合代入演算子
a = a + 1 a += 1
a = a - 1 a -= 1
a = a * (n+1) a *= (n+1)
a = a / (n+1) a /= (n+1)
a = a % b a %= b

"Wikipedia logo"ド・モルガンの法則

等価であるビット演算
AND OR
~(a & b) ~a | ~b
~a & ~b ~(a | b)
a & ~b ~(~a | b)
~(a & ~b) ~a | b
等価である論理演算
AND OR
!(a && b) !a || !b
!a && !b !(a || b)
a && !b !(!a || b)
!(a && !b) !a || b

"Wikipedia logo"ド・モルガンの法則により、各行とも AND 列にあるコードは OR 列のそれと論理的に等価です。ab は変数である必要は無く、演算式でも構いません。ある種の状況では、コードを簡略化するためにこの手法が使えます。これらの 2 セットを混同しないことが大切です。上 2 行はド・モルガンの法則をそのとおりに表現したものであり、下 2 行はそれから導き出したものです。