Difference between revisions of "LSL Operators/de"
m (→De Morgansche Regeln: fixed a typo) |
m (Fixed some missing translations, typos) |
||
(One intermediate revision by the same user not shown) | |||
Line 12: | Line 12: | ||
| () || Klammern || a * (b + c) | | () || Klammern || a * (b + c) | ||
|- | |- | ||
| [] || Eckige Klammern: Listen-Konstruktor || [a, 2, " | | [] || Eckige Klammern: Listen-Konstruktor || [a, 2, "das", 0.01] | ||
|- | |- | ||
| ('' | | (''typ'') || Typkonvertierung || nachricht = "Das Ergebnis lautet:" + (string) ergebnis; | ||
|- | |- | ||
| ! ~ ++ -- || Logisches-NICHT, Bitweises-NICHT, Inkrement, Dekrement || | | ! ~ ++ -- || 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 || | | + || Addition oder String-Verknüpfung || zwei = 1+1; | ||
text = "Hello" + "World"; | text = "Hello" + "World"; | ||
|- | |- | ||
Line 36: | Line 36: | ||
| == != || Vergleich auf Gleichheit, Vergleich auf Ungleichheit || istFalsch = ("dies" == "das"); | | == != || Vergleich auf Gleichheit, Vergleich auf Ungleichheit || istFalsch = ("dies" == "das"); | ||
|- | |- | ||
| & || Bitweises UND || | | & || Bitweises UND || null = 4 & 2; | ||
vier = 4 & 4; | |||
|- | |- | ||
| ^ || Bitweises XOR || | | ^ || Bitweises XOR || null = 4 ^ 4; | ||
sechs = 4 ^ 2; | |||
|- | |- | ||
| <nowiki>|</nowiki> || Bitweises ODER || vier = 4 <nowiki>|</nowiki> 4; | | <nowiki>|</nowiki> || Bitweises ODER || vier = 4 <nowiki>|</nowiki> 4; | ||
sechs = 4 <nowiki>|</nowiki> 2; | |||
|- | |- | ||
| <nowiki>||</nowiki> || Logisches ODER || istWahr = (FALSE <nowiki>||</nowiki> TRUE); | | <nowiki>||</nowiki> || Logisches ODER || istWahr = (FALSE <nowiki>||</nowiki> TRUE); | ||
Line 73: | Line 73: | ||
'''Anmerkung:''' Die Boole'schen Operatoren '''||''' und '''&&''' werden in der Auswertungs-Reihenfolge von LSL als gleichwertig angesehen. | '''Anmerkung:''' Die Boole'schen Operatoren '''||''' und '''&&''' werden in der Auswertungs-Reihenfolge von LSL als gleichwertig angesehen. | ||
'''Anmerkung:''' Die | '''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)</lsl> | ||
Line 87: | Line 87: | ||
|+ | |+ | ||
==+ Operator== | ==+ Operator== | ||
<code> | <code>ergebnis = links + rechts</code> | ||
|-{{Hl2}} | |-{{Hl2}} | ||
!Linker Typ | !Linker Typ | ||
Line 137: | Line 137: | ||
{| {{Prettytable}} | {| {{Prettytable}} | ||
|+ | |+ | ||
==Operator-Abkürzungen== | ==Operator-Abkürzungen== | ||
Alternativen zum einfachen '=' Operator... | Alternativen zum einfachen '=' Operator... | ||
Line 192: | Line 193: | ||
|- | |- | ||
|} | |} | ||
Nach den De Morganschen Regeln (zeilenweise dargestellt), ist der Code in der '''UND'''-Spalte logisch | 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. | ||
{{LSLC/de|Operators}}{{LSLC/de|Flow Control}}{{LSLC/de}} | {{LSLC/de|Operators}}{{LSLC/de|Flow Control}}{{LSLC/de}} |
Latest revision as of 22:45, 7 September 2014
LSL Portal | Funktionen | Ereignisse | Typen | Konstanten | Datenflusskontrolle | Script Sammlung | Tutorien |
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 | vier = 4 | 4;
sechs = 4 | 2; |
|| | 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.
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 rechts Nicht brauchbar um Rotationen zu kombinieren, stattdessen verwendet man die Operatoren * oder /. |
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
UND | ODER |
---|---|
~(a & b) |
~a | ~b
|
~a & ~b |
~(a | b)
|
a & ~b |
~(~a | b)
|
~(a & ~b) |
~a | b
|
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.