LSL Operators/de

Operatoren sind Zeichen mit denen man Informationen aus Variablen auf vordefinierte Weise verarbeiten lassen kann. Eine (mathematische) Aktion kann auf eine oder zwei Operanden angewendet werden.
Ein einfaches Beispiel ist 1 + 2, wobei die Zahlen 1 und 2 die Operanden darstellen, und + ist der Operator.
Operator 	Beschreibung 	Anwendungsbeispiel 	 	
() 	Klammern 	a * (b + c) 	 	
[] 	Eckige Klammern: Listen-Konstruktor 	[a, 2, "das", 0.01] 	 	
(typ) 	Typkonvertierung 	nachricht = "Das Ergebnis lautet:" + (string) ergebnis;	 	
! ~ ++ -- 	Logisches-NICHT, Bitweises-NICHT, Inkrement, Dekrement 	zaehler++; 	 	
* / % 	Multiplikation/Skalarprodukt, Division, Modulo/Kreuzprodukt	rest = (anzahl + 1)%5; 	 	
- 	Subtraktion 	eins = 3 - 2; 	 	
+ 	Addition oder String-Verknüpfung 	zwei = 1+1;
text = "Hello" + "World"; 	 	
+ 	Konkatenation oder Zusammenführung von Listen 	meineListe = [1, 2, 3] + [4, 5];
neueListe = alteListe + zusatzListe;	 	
<< >> 	Links Shift, Rechts Shift 	acht = 4 << 1; 	 	
< <= > >= 	Kleiner Als, Kleiner Als oder Gleich,
Größer Als, Größer Als oder Gleich	istFalsch = (6 <= 4); 	 	
== != 	Vergleich auf Gleichheit, Vergleich auf Ungleichheit 	istFalsch = ("dies" == "das"); 	 	
& 	Bitweises UND 	null = 4 & 2;
vier = 4 & 4; 	 	
^ 	Bitweises XOR 	null = 4 ^ 4;
sechs = 4 ^ 2; 	 	
 	Bitweises ODER 	 	 	
 	 	Logisches ODER 	istWahr = (FALSE	TRUE);
&& 	Logisches UND 	istFalsch = (FALSE && TRUE); 	 	
= += -= *= /= %=	Zuweisung 	vier = 4; 	 	
Anmerkung: Anders als in den meisten anderen Programmiersprachen die den C-Stil für && und || Operatoren anwenden, werden beide Operanden immer ausgewertet. Zum Beispiel:
<lsl>if (TRUE || 1/0) llSay(PUBLIC_CHANNEL, "Aha!");</lsl> 
führt zu einer Fehlermeldung, statt "Aha" auszugeben.
Anmerkung: Die ++ (Inkrement) und -- (Dekrement) - Operatoren wirken sich auf die Zahl entweder vor oder nach der Auswertung aus, je nachdem ob sie vor oder nach dieser Zahl stehen.
<lsl>integer count;
if(!(++count)) // Wird erhöht, und danach ausgewertet.
llSay(PUBLIC_CHANNEL, "Aha"); // Wird nicht ausgegeben.</lsl>
<lsl>integer count;
if(!(count++)) // Wird ausgewertet und danach erhöht.
llSay(PUBLIC_CHANNEL, "Aha"); // Wird ausgegeben.</lsl>
Anmerkung: Die Boole'schen Operatoren || und && werden in der Auswertungs-Reihenfolge von LSL als gleichwertig angesehen.
Anmerkung: Die Auswertungsreihenfolge unterscheidet sich von der Auswertungsreihenfolge der meisten Programmiersprachen. Wenn der Wert von x im nachfolgenden Beispiel initial 1 ist, dann werden die zwei Bedingungen unterhalb als FALSCH ausgewertet, und die nächsten beiden als WAHR:
<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>
Beide Seiten werden ausgewertet, unabhängig davon ob eine der Seiten WAHR ist.
Anmerkung: Gleichheits-Test bei Listen vergleichen nicht deren Inhalte, sondern lediglich deren Länge.
==+ Operator==
ergebnis = links + rechts
Linker Typ	Rechter Typ	Ergebnistyp	Beschreibung
integer 	integer 	integer 	Addiert links und rechts
integer 	float 	float 	Addiert links und rechts
float 	integer 	float 	Addiert links und rechts
string 	string 	string 	Hängt rechts an das Ende von links an.
list 	* 	list 	Hängt rechts nach dem Ende von links an.
* 	list 	list 	Fügt links vor dem Start von rechts ein.
vector 	vector 	vector 	Addiert links und rechts
rotation 	rotation 	rotation 	Addiert links und rechtsNicht brauchbar um Rotationen zu kombinieren, stattdessen verwendet man die Operatoren * oder /.
==Operator-Abkürzungen==
Alternativen zum einfachen '=' Operator...
Einfacher Zuweisungsoperator	Operator-Abkürzung (shorthand operator)
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
==De Morgansche Regeln==
 Bitweise Gleichwertigkeiten
UND 	ODER
~(a & b) 	~a | ~b
~a & ~b 	~(a | b)
 	
a & ~b 	~(~a | b)
~(a & ~b)	~a | b
 Boole'sche Gleichwertigkeiten
UND 	ODER
!(a && b) 	!a || !b
!a && !b 	!(a || b)
 	
a && !b 	!(!a || b)
!(a && !b)	!a || b
Nach den De Morganschen Regeln (zeilenweise dargestellt), ist der Code in der UND-Spalte logisch äquivalent zum Code in der ODER-Spalte. a und b müssen nicht zwangsläufig Variablen sein, sondern können auch Ausdrücke sein. In speziellen Fällen kann man diese Gleichwertigkeiten anwenden, um komplexen Code vereinfacht darzustellen. Es ist wichtig diese zwei Tabellen nicht zu verwechseln wenn man sie anwendet. Die ersten beiden Zeilen stellen die De Morganschen Regeln dar wie postuliert, und die letzten beiden Zeilen bauen darauf auf.