LSL 演算子

From Second Life Wiki
Jump to navigation Jump to search

演算子は、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 行はそれから導き出したものです。