Mastersign.Expressions

Die Syntax von Mastersign.Expressions erlaubt die folgenden Elemente: Literale, Symbole (Variablen, Konstanten, Parameter), Operatoren, Gruppen und Funktionsaufrufe.

Literale

Es werden logische, numerische und Zeichenfolgenliterale unterstützt. Zusätzlich gibt es das Nullliteral für leere CLR-Referenzen.

Logische Literale

Als logische Literale existieren 'true' und 'false'. Sie müssen klein geschrieben werden. Diese beiden Literale sind Werte des primitiven CLR-Datentyps System.Boolean.

Numerische Literale

Es werden ganzzahlige, Fließkomma- und Dezimalwerte unterstützt. Alle numerischen Literale sind vorzeichenbehaftet. Ganzzahlige werte werden durch die primitiven CLR-Datentypen System.Int32 oder System.Int64 repräsentiert. Fließkommawerte werden durch die primitiven CLR-Datentypen System.Single oder System.Double repräsentiert. Dezimalwerte werden durch den primitiven CLR-Datentyp System.Decimal repräsentiert. Die Literale werden nur in internationaler Schreibweise erkannt, d.h. das Dezimaltrennzeichen ist ein Punkt. Es werden keine Tausendertrennzeichen unterstützt und auch keine wissenschaftliche Exponentialschreibweise für Fließkommawerte.

Typ Beispiele Erklärung
Automatische Ganzzahl 1, 98765443, -400, +200, 0020

Der Wert entscheidet, ob 32Bit oder 64Bit benötigt werden.

32Bit Ganzzahl 24i, 42I, -300i, +400i Das Postfix 'i' kann klein oder groß geschrieben werden. Der Wert wird durch System.Int32 mit 32Bit repräsentiert.
64Bit Ganzzahl 6000L, -1234L, +2l Das Postfix 'l' kann klein oder groß geschrieben werden. Der Wert wird durch System.Int64 mit 64Bit repräsentiert.
Automatische Fließkommazahl 0.0, 123.567, -1.0, +0.02, 001.001 Der Wert entscheidet, ob 32Bit oder 64Bit benötigt werden.
32Bit Fließkommazahl 0.0f, 42F, -30.0f, +002.1F Das Postfix 'f' kann klein oder groß geschrieben werden. Der Wert wird durch System.Single mit 32Bit repräsentiert.
64Bit Fließkommazahl 0.0d, 42D, -30.0D, +002.1D Das Postfix 'd' kann klein oder groß geschrieben werden. Der Wert wird durch System.Double mit 64Bit repräsentiert.
Dezimalzahl 24.99m, -90.95M, +00.001m Das Postfix 'm' kann klein oder groß geschrieben werden. Der Wert wird durch System.Decimal mit 128Bit repräsentiert.

Zeichenfolgenliterale

Zeichenfolgen werden durch doppelte Anführungszeichen eingeschlossen und können Escapezeichen, maskiert durch den Backslash '\', enthalten. Zeichenfolgen werden durch den CLR-Datentyp System.String repräsentiert.

Beispiele: "abc", "Hallo Welt!", "Anton sagte \"Was für ein Wetter!\"", "C:\\User\\"

Die folgenden Escapezeichen werden unterstützt:

Escapezeichen Bedeutung
\\ Der einfache Backslash '\'.
\" Das doppelte Anführungszeichen '"'.
\a Klingelzeichen oder Warnsignal (Unicode 0x0007).
\b Backspace - ein Schritt zurück (Unicode 0x0008).
\f Seitenvorschub (Unicode 0x000C).
\n Newline - neue Zeile (Unicode 0x000A).
\r Return - Wagenrücklauf (Unicode 0x000D).
\t Tabstoppzeichen (Unicode 0x0009).
\v Vertikales Tabstoppzeichen (Unicode 0x000B).

Nullliteral

Das Nullliteral ist 'null'. Es muss klein geschrieben werden und repräsentiert die leere Referenz. Null ist mit jedem Referenztyp kompatibel.

Operatoren

Operatoren dienen zum Verknüpfen von zwei Werten. Wie z.B. '1 + 2'. Es gibt numerische, logische, Zeichenfolgen- und Vergleichsoperatoren.

Numerische Operatoren

Die folgenden Operatoren verknüpfen numerische Werte. Werden ganzzahlige Werte mit weniger als 32Bit Genauigkeit verknüpft, z.B. System.Byte oder System.UInt16, werden sie vor der Operation nach System.Int32 konvertiert. Werden zwei numerische Werte mit unterschiedlicher Genauigkeit verknüpft, wird der ungenauere Wert zunächst in den genaueren konvertiert.

Operator Beispiele Erläuterung
+ 1+2, -4 + -9.99m, 3F+4F Die Addition bildet die Summe zweier Werte.
- 3-4, 18 - -2.0, 4L-30m Die Subtraktion bildet die Differenz zweier Werte.
* 10 * 2, 42*-100.001 Die Multiplikation bildet das Produkt zweier Werte.
/ 1/3, 2/3.0, -8.0m/2 Die Division bildet den Quotient zweier Werte.
^ 2^10, 10^3.151492D Die Hochrechnung bildet die Potenz eines Wertes zu einer Basis.

Logische Operatoren

Die logischen Operatoren verknüpfen ausschließlich Wahrheitswerte (System.Boolean).

Operator Beispiele Erläuterung
and true and false Das logische Und ergibt nur dann true, wenn beide Operanden true sind.
or true or false Das logische Oder ergibt immer dann true, wenn mindestens ein Operand true ist.
xor true xor false Das logische Exklusiv-Oder ergbit nur dann true, wenn genau ein Operand true ist.

Zeichenkettenoperatoren

Es gibt nur einen Zeichenkettenoperator und das ist die Verkettung oder Konkatenation. Ist ein Operand keine Zeichenkette (System.String) wird versucht den Wert in eine Zeichenkette umzuwandeln. Dafür wird System.Objekt.ToString() verwendet. Ist ein Operand eine Null-Referenz, wird sie in die leere Zeichenfolge umgewandelt.

Operator Beispiele Erläuterung
& "Hallo " & "Welt!", 1&"x", true & false Die Konkatenation verbindet zwei Zeichenfolgen durch Aneinanderreihen. Operanden die keine Zeichenfolgen sind, werden in Zeichenfolgen umgewandelt.

Vergleichsoperatoren

Vergleichsoperatoren dienen dazu das Verhältnis zwischen zwei Werten zu ermitteln. In der Regel können nur Werte gleichen Typs verglichen werden. Bei numerischen Werten wird ein ungenauerer Operand vor dem Vergleich in den Typ des genaueren Operands konvertiert. Logische Werte und Refenzen können nur auf Gleichheit oder Ungleichheit überprüft werden.

Operator Beispiel Erläuterung
< 1 < 2, "a" < "b" Der Kleiner-Operator ergibt nur dann true, wenn der linke Operand kleiner als der rechte ist.
<= 3 <= 1.0, "Abc" <= "abc" Der Kleinergleich-Operator ergibt dann true, wenn der linke Operand kleiner oder gleich dem rechten ist.
= 4.0 = 4, "b" = "c", true = false Der Gleich-Operator ergibt nur dann true, wenn beide Operanden gleich sind.
<> 4.0 <> 4, "a" <> null, true <> false Der Ungleich-Operator ergibt nur dann true, wenn sich die beiden Operanden unterscheiden.
>= 8.0 >= 8F, "400" >= "200" Der Größergleich-Operator ergibt nur dann true, wenn der linke Operand größer oder gleich dem rechten ist.
> 100 > 0, "B" > "b" Der Größer-Operator ergibt nur dann true, wenn der linke Operand größer als der rechte ist.

Prioritäten und Bindung

Werden mehrere Operatoren ohne Gruppierung durch Klammern in einem Ausdruck verwendet, entscheidet die Priorität eines Operators über die Bindung. Besitzen zwei Operatoren die gleiche Priorität, wird zunächst der linke Operator ausgewertet und anschließend der rechts folgende.

Beispiel: Hätten die Operatoren * und + die gleiche Bindungsstärke, würde der Ausdruck '1 + 2 * 3' interpretiert wie '(1 + 2) * 3' und den Wert 9 ergeben. Da * aber eine stärkere Bindung als + besitzt, wird der Ausdruck wie '1 + (2 * 3)' ausgewertet, und ergibt den Wert 7.

Je niedriger die Prioritätsebene, so stärker die Bindung.

Prioritätsebene Operatoren
0 ^
1 *, /
2 +, -
3 &
4 <, <=, =, <>, >=, >
5 and
6

or, xor

Gruppierung

Um die Bindung zwischen verschiedenen Operatoren zu beeinflussen, können Operationen mit der Hilfe von Klammern gruppiert werden.

Beispiel: '1 + 2 * 3' ergibt durch die stärkere Bindung des Multiplikationsoperators den Wert 7, mit der Hilfe von Klammern kann dem Additionsoperator eine stärkere Bindung eingeräumt werden '(1 + 2) * 3' und das Ergbnis ist 9.

Variablen, Konstanten, Parameter

Unterstützt seit Version: 0.2

Variablen sind Werte, die im Auswertungskontext hinterlegt sind und auf die mit einem Namen verwiesen werden kann. Ist z.B. für den Namen 'x' der Wert 100 im Auswertungskontext festgelegt, ergibt der Ausdruck '2 * x' den Wert 200. In Variablen können Werte beliebigen Typs, auch z.B. Zeichenketten oder logische Werte, festgelegt werden. Variablen repräsentieren auch nach dem Kompilieren des Lambda-Delegaten immer den aktuellen Wert im Auswertungskontext. Variablen können auch als Konstanten markiert sein. Der Wert einer Konstante wird beim Kompilieren des Delegaten direkt verwendet wird, Aktualisierungen des Wertes im Auswertungskontext wirken sich nicht mehr auf den Delegat aus. Ob eine Variable als konstant markiert wird, bestimmt der Entwickler beim Setzen der Variable im Auswertungskontext.

Parameter sind syntaktisch nicht von Variablen zu unterscheiden. Ihr Wert wird jedoch nicht im Auswertungskontext hinterlegt, sondern beim Aufruf des Delegaten als echter Parameter übergeben. Existiert ein Parameter mit dem gleichen Namen wie eine Variable, wird dem Parameter der Vorzug gegeben. Parameter können demzufolge Variablen verdecken.

Funktionen

Funktionen werden im Anwendungskontext festgelegt und können mit Hilfe ihres Namens und einer Parameterliste aufgerufen werden. Die Parameterliste folgt auf den Funktionsnamen, ist von runden Klammern umgeben und verwendet das Komma als Trennung zwischen den Parametern. Der Aufruf einer Funktion mit dem Namen 'f' und ohne Parameterliste sieht so aus: 'f()'.

Wird im Auswertungskontext eine Funktion mit dem Namen 'sin' und einem Parameter vom Typ System.Double festgelegt, welche den Sinus der übergebenen Zahl berechnet, ergibt der Ausdruck 'sin(3.1514926535)' annähernd den Wert 0.0. Der Aufruf einer Funktion zur mehrfachen Wiederholung einer Zeichenkette könnte so aussehen: 'repeat("abc", 3)' und würde "abcabcabc" zurück geben.

Unter einem Funktionsnamen können mehrere Varianten einer Funktion mit sich unterschiedender Parameterliste festgelegt werden. Eine solche Funktion nennt man 'überladen'. Bei einem Aufruf einer überladenen Funktion wird die am besten passende Variante verwendet.

Member Lesen

Optionale Spracheigenschaft

Unterstützt seit Version: 0.4.0

Für den lesenden Zugriff auf öffentliche Objekteigenschaften oder -felder wird die Punktnotation verwendet. Um das Feld 'b' von dem Wert 'a' zu lesen, sieht die Syntax wie folgt aus: 'a.b'. Der Ausdruck 'a' kann alles sein, was einen Wert oder ein Objekt liefert, das ein öffentliches Feld oder eine öffentliche Eigenschaft 'b' besitzt. Der Ausdruck '"abc" & "def").Length' ergibt zum Beispiel das Ergebnis '6'.

Joomla templates by a4joomla