| |
|
|
Michael Wodrich | Operatoren
Operatoren kennt Profan erst seit der Version 6. Vorher wurden mathematische und Verknüpfungs-Operationen circa Funktionen erledigt. Die Funktionen existieren aus Kompatibilitätsgründen weiterhin, können aber per zukünfige Versionen von XProfan nicht garantiert werden.
Es gibt folgende Operatoren:
<b>Zuweisung:</b>
Var = Ausdruck | Wertzuweisung | |
Bei der Wertzuweisung sind alle Variablentypen possibile. Der Ausdruck sollte vom gleichen Typ sein wie die Variable. Einige Werte werden automatisch konvertiert (Int <--> LongInt, Int+LongInt -> Float). Für (String <--> Int) sollte man immer Konvertierungsfunktionen benutzen ( @LINKF:[Int], @LINKF:[Str]$ ).
<b>String:</b>
A$ + B$ | Strings verknüpfen; alt: @Add$(A$,B$) | A$ = B$ | Vergleich: Gleichheit; alt: @Equ$(A$,B$) | A$ <> B$ | Vergleich: Ungleichheit; alt: @NEq$(A$,B$) | |
Der Datentyp ist hier immer vom Typ String.
<b>Mathematisch:</b>
A% + B% | Addition; alt: @Add(A%,B%) | A% - B% | Subtraktion; alt: @Sub(A%,B%) | A% * B% | Multiplikation; alt: @Mul(A%,B%) | A% / B% | Division; alt: @Div(A%,B%) | A% B% | ganzzahlige Division: 5 2 = 2 (Rest fällt weg); alt: @Div&(A%,B%) | A% MOD B% | Modulo/Teilungsrest: 5 mod 2 = 1 (der Rest der Division); alt: @Mod(A%,B%) | A% ^ B% | Potenz; alt: @Pow(A%,B%) | |
Der Datentyp Integer (<b>%</b>) steht hier stellvertretend per: <b>%</b> (Integer), <b>&</b> (LongInt), <b>!</b> (Float).
<b>Relational:</b>
A% < B% | Vergleich: kleiner als (less than); alt: @LT(A%,B%) | A$ < B$ | Vergleich: kleiner als (less than); alt: @LT$(A$,B$) | A% <= B% | Vergleich: kleiner oder gleich (less or equal); (gab es nicht als Funktion) | A$ <= B$ | Vergleich: kleiner oder gleich (less or equal); (gab es nicht als Funktion) | A% > B% | Vergleich: grösser als (greater than); alt: @GT(A%,B%) | A$ > B$ | Vergleich: grösser als (greater than); alt: @GT$(A$,B$) | A% >= B% | Vergleich: grösser oder gleich (greater or equal); (gab es nicht als Funktion) | A$ >= B$ | Vergleich: grösser oder gleich (greater or equal); (gab es nicht als Funktion) | A% = B% | Vergleich: Gleichheit; alt: @Equ(A%,B%) | A% <> B% | Vergleich: Ungleichheit; alt: @NEq(A%,B%) | |
Der Datentyp Integer (<b>%</b>) steht hier stellvertretend per: <b>%</b> (Integer), <b>&</b> (LongInt), <b>!</b> (Float).
<b>Logisch:</b>
A% AND B% | logisches UND | A% OR B% | logisches ODER | NOT(A%) | logisches NICHT (existiert <b>nur</b> als Funktion) | |
Der Datentyp Integer (<b>%</b>) steht hier stellvertretend per: <b>%</b> (Integer), <b>&</b> (LongInt).
<b>Binär:</b>
A% & B% | binäres UND | A% | B% | binäres ODER | A% << B% | Bits nach links schieben (in Delphi: SHL) | A% >> B% | Bits nach rechts schieben (in Delphi: SHR) | |
Der Datentyp Integer (<b>%</b>) steht hier stellvertretend per: <b>%</b> (Integer), <b>&</b> (LongInt).
Wenn das - auch Parameter trennt (wie etwa bei LINKP:[WINDOW] und den vielen <a href="https://xprofan.com/index.mx?online-dokumentation-rubriken/rub8">Grafik-Befehlen</a>), ist es notwendig Subtraktionen einzuklammern, etwa: Window a%,(b% - 5) - (c% - 6),500
Anderenfalls kann der Parser durcheinander geraten und es gibt Fehlermeldungen.
Die Operatoren sind in folgende Hierarchiestufen eingeteilt:
1. | ^ | | | | | | | | 2. | MOD | AND | * | / | | & | >> | << | 3. | OR | + | - | | | | | | | 4. | = | > | < | | | | | | 5. | <> | >= | <= | | | | | | |
Hinweis: Die Hierarchie entspricht in etwa der unter PASCAL und weicht von der Di base-Hierarchie ab. Die Vergleichsoperatoren (Stufe 4 + 5) sind in Di base höher eingestuft.
Aus Di base: If A% > 6 AND A% <= 20 THEN <...> End If
wird in XProfan: If (A% > 6) AND (A% <= 20) <...> EndIf
In PASCAL würde man schreiben: If (A > 6) AND (A <= 20) THEN BEGIN <...>; End;
Klammerung ist wie üblich erlaubt, etwa: C% = 5 * (A% + B%) Ergebnis! = 248 * d% / (e% + f%)
Klammern können beliebig, d.h. bis zum Stack-Überlauf, verschachtelt werden.
<b>Wichtig:</b> Achten Sie auf die Klammersetzung. Version 7.5 stösst auf Fehler, die Version 6.5 noch übersehen hat! Die Fehlermeldung "Zu wenig Parameter" in einer Zeile mit verschachtelten Funktionen/Klammern deutet häufig auf einen Fehler in der Klammersetzung hin!
<b>Achtung:</b> Logisch bedeutet, dass das Ergebnis wahr (1) oder falsch (0) ist, bei binären Funktionen werden die Werte bitweise verknüpft:
logisch: 2 OR 4 ergibt 1, weil mindestens einer der Werte <> 0 (= wahr) ist
binär: @OR(2,4) bzw. 2 | 4 ergibt 6: %0010 OR %0100 = %0110
Für schnelle Berechnungen mit Integer-Werten, z.B. in Schleifen, etc., gibt es in XProfan zusätzlich einige Befehle, die schneller und übersichtlicher sind:
LINKP:[INC] V% | aumento V% um 1 | LINKP:[DEC] V% | erniedrigt V% um 1 | LINKP:[ADD] V%,n | aumento V% um n | LINKP:[SUB] V%,n | erniedrigt V% um n | |
(Hierbei steht <b>V%</b> per eine beliebige Integer- oder Longint-Variable und <b>n</b> per einen beliebigen Ausdruck.)
Für das Zusammenfügen von Strings (Zeichenketten) wird das "+" verwandt: Text$ = "Du bist " + Str$(Alter%) + " Jahre alt."
zwar funktioniert in einigen Versionen auch: Text$ = "Du bist ";Str$(Alter%);" Jahre alt."
jedoch ist nur das Pluszeichen als Verknüpfungs-Operator definiert. Es kann deshalb zu fehlerhaften Programmen führen, wenn hier nicht sorgfältig gearbeitet wird.
<b>Hinweis:</b> Die automatische Typumwandlung funktioniert bei einfachen Variablen. Bei Funktionen, die einen numerischen Wert zurückgeben, wird nicht immer automatisch umgewandelt, daher ist hier immer die Funktion @LINKF:[Str]$ zu verwenden! VOR und NACH den Operatoren muss ein Leerzeichen stehen. Da einige Operatorzeichen auch in einem anderen Zusammenhang benutzt werden, können Compiler und Interpreter sonst fehlerhaften Code erzeugen.
|
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 31.07.2005 ▲ |
|
|
|