Difference between revisions of "LSL 演算子"
Coffee Mills (talk | contribs) |
|||
(11 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
{{Multi-lang}} | {{Multi-lang|1=LSL_Operators|2=/ja}} | ||
{{LSL Header/ja}} | {{LSL Header/ja}} | ||
演算子は、1個もしくは2個の被演算子に対して演算(もしくは数学的な作用)を実行するために用いられます。簡単で一般的な例として、1 + 2 の場合、1 と 2 が被演算子、 '''+''' が演算子です。 | |||
この概念は、被演算子に変数が利用できること(特殊な制約として代入演算子の左辺は変数でなければいけない)により、LSLでは大幅に拡張されました。 | |||
{| bgcolor="#FFFFFF" border="1" cellspacing="2" cellpadding="6" | {| bgcolor="#FFFFFF" border="1" cellspacing="2" cellpadding="6" | ||
|- bgColor="#A7C1F2" | |- bgColor="#A7C1F2" | ||
! | ! 演算子 | ||
! | ! 説明 | ||
! | ! 使用例 | ||
|- | |- | ||
| () [] . || Parenthesis, Brackets, | | () [] . || 小カッコ(Parenthesis), 大カッコ(Brackets), ドット || do this second (do this first) | ||
|- | |- | ||
| (''type'') || | | (''type'') || 型キャスト || message = "The result is:" + (string) result; | ||
|- | |- | ||
| ! ~ ++ -- || | | ! ~ ++ -- || 論理否定, ビット反転, インクリメント, デクリメント || counter++; | ||
|- | |- | ||
| * / % || | | * / % || 乗算/内積, 除算, 剰余/外積 || rollover = (count + 1)%5; | ||
|- | |- | ||
| - || | | - || 減算 || one = 3 - 2; | ||
|- | |- | ||
| + || | | + || 加算 あるいは 文字列連結 || two = 1+1; | ||
text = "Hello" + "World"; | text = "Hello" + "World"; | ||
|- | |- | ||
| + || | | + || 配列の連結 || myList = [1, 2, 3] + [4, 5]; | ||
newList = oldList + addList; | newList = oldList + addList; | ||
|- | |- | ||
| << >> || | | << >> || 左シフト, 右シフト || eight = 4 << 1; | ||
|- | |- | ||
| < <= > >= || | | < <= > >= || 未満, 以下, より大きい , 以上 | ||
|| isFalse = (6 <= 4); | || isFalse = (6 <= 4); | ||
|- | |- | ||
| == != || | | == != || 等価比較, 不等価比較 || isFalse = ("this" == "that"); | ||
|- | |- | ||
| & || | | & || ビット演算 AND || zero = 4 & 2; | ||
four = 4 & 4; | four = 4 & 4; | ||
|- | |- | ||
| ^ || | | ^ || ビット演算 XOR || zero = 4 ^ 4; | ||
six = 4 ^ 2; | six = 4 ^ 2; | ||
|- | |- | ||
| <nowiki>|</nowiki> || | | <nowiki>|</nowiki> || ビット演算 OR || four = 4 <nowiki>|</nowiki> 4; | ||
six = 4 <nowiki>|</nowiki> 2; | six = 4 <nowiki>|</nowiki> 2; | ||
|- | |- | ||
| <nowiki>||</nowiki> || | | <nowiki>||</nowiki> || 条件比較 OR || isTrue = (FALSE <nowiki>||</nowiki> TRUE); | ||
|- | |- | ||
| && || | | && || 条件比較 AND || isFalse = (FALSE && TRUE); | ||
|- | |- | ||
| = += -= *= /= %= || | | = += -= *= /= %= || 代入 || four = 4; | ||
|} | |} | ||
'''Note:''' 他の多くのプログラミング言語と異なり、C 言語風の '''&&''' および '''||''' という演算子は'''常に''' '''両方の'''被演算子を評価します。例えば、 | |||
'''Note:''' | <lsl>if (TRUE || 1/0) llSay( 0, "Aha!" );</lsl> | ||
は "Aha!" と表示する前に Math Error (除算エラー) を起こします。 | |||
'''Note:''' ブーリアン演算子の優先順位は不明瞭です。式解析の優先順位に矛盾を生んだり、もしくは単純に '''||''' と '''&&''' の優先順位を同一と見なすかもしれない[http://jira.secondlife.com/browse/SVC-779 バグ]を含んでいるかもしれません。順位を明確にしたい場合は括弧 "()" で囲んでください。 | |||
'''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> | |||
両辺の真偽に関わりなく、両辺とも評価されます。 | |||
{| {{Prettytable}} | {| {{Prettytable}} | ||
Line 59: | Line 72: | ||
<code>result = left + right</code> | <code>result = left + right</code> | ||
|-{{Hl2}} | |-{{Hl2}} | ||
!Left | !Left の型 | ||
!Right | !Right の型 | ||
!Result | !Result の型 | ||
! | !説明 | ||
|- | |- | ||
|integer | |integer | ||
|integer | |integer | ||
|integer | |integer | ||
|'''left'''と'''right'''を加算する | |'''left''' と '''right''' を加算する | ||
|- | |- | ||
|integer | |integer | ||
|float | |float | ||
|float | |float | ||
|'''left'''と'''right'''を加算する | |'''left''' と '''right''' を加算する | ||
|- | |- | ||
|float | |float | ||
|integer | |integer | ||
|float | |float | ||
|'''left'''と'''right'''を加算する | |'''left''' と '''right''' を加算する | ||
|- | |- | ||
|string | |string | ||
|string | |string | ||
|string | |string | ||
| | |'''left''' の末尾に '''right''' を連結する | ||
|- | |- | ||
|list | |list | ||
|* | |* | ||
|list | |list | ||
| | |'''left''' の末尾に '''right''' を連結する | ||
|- | |- | ||
|* | |* | ||
|list | |list | ||
|list | |list | ||
| | |'''left''' が '''right''' の先頭に新しい配列要素として追加される。 | ||
|- | |- | ||
|vector | |vector | ||
|vector | |vector | ||
|vector | |vector | ||
| | |'''left''' と '''right''' を加算する | ||
|- | |- | ||
|rotation | |rotation | ||
|rotation | |rotation | ||
|rotation | |rotation | ||
| | |'''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 | ~b</code> | |||
|- | |||
|| <code>~a & ~b</code> || <code>~(a | b)</code> | |||
|- | |||
| colspan="2" | | |||
|- | |||
|| <code>a & ~b</code> || <code>~(~a | b)</code> | |||
|- | |||
|| <code>~(a & ~b)</code> || <code>~a | b</code> | |||
|- | |||
|} | |||
{| {{Prettytable|style=margin-top:0; float:left;}} | |||
|+ 等価である論理演算 | |||
!AND | |||
!OR | |||
|- | |||
|| <code>!(a && b)</code> || <code>!a || !b</code> | |||
|- | |||
|| <code>!a && !b</code> || <code>!(a || b)</code> | |||
|- | |||
| colspan="2" | | |||
|- | |||
|| <code>a && !b</code> || <code>!(!a || b)</code> | |||
|- | |||
|| <code>!(a && !b)</code> || <code>!a || b</code> | |||
|- | |||
|} | |} | ||
{{Wikipedia|ド・モルガンの法則|ド・モルガンの法則|lang=ja}}により、各行とも '''AND''' 列にあるコードは '''OR''' 列のそれと論理的に等価です。'''a''' と '''b''' は変数である必要は無く、演算式でも構いません。ある種の状況では、コードを簡略化するためにこの手法が使えます。これらの 2 セットを混同しないことが大切です。上 2 行はド・モルガンの法則をそのとおりに表現したものであり、下 2 行はそれから導き出したものです。 | |||
{{LSLC|}}{{LSLC|Syntax}}{{LSLC|Keywords}} | {{LSLC/ja|}}{{LSLC/ja|Syntax}}{{LSLC/ja|Keywords}} |
Latest revision as of 11:52, 7 April 2011
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
演算子は、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>
両辺の真偽に関わりなく、両辺とも評価されます。
Left の型 | Right の型 | Result の型 | 説明 |
---|---|---|---|
integer | integer | integer | left と right を加算する |
integer | float | float | left と right を加算する |
float | integer | float | left と right を加算する |
string | string | string | left の末尾に right を連結する |
list | * | list | left の末尾に right を連結する |
* | list | list | left が right の先頭に新しい配列要素として追加される。 |
vector | vector | vector | left と right を加算する |
rotation | rotation | rotation | left と right を加算する あくまで演算例として。実際の回転の組み合わせでは * および / を使ってください。 |
単純代入演算子 | 複合代入演算子 |
---|---|
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 |
ド・モルガンの法則
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
|
ド・モルガンの法則により、各行とも AND 列にあるコードは OR 列のそれと論理的に等価です。a と b は変数である必要は無く、演算式でも構いません。ある種の状況では、コードを簡略化するためにこの手法が使えます。これらの 2 セットを混同しないことが大切です。上 2 行はド・モルガンの法則をそのとおりに表現したものであり、下 2 行はそれから導き出したものです。