Anweisungen & Operatoren
DelphiScript-Anweisungen
Eine Anweisung in DelphiScript gilt als „einfach“, wenn sie keine anderen Anweisungen enthält. Beispiele für einfache Anweisungen sind Zuweisungsanweisungen und Prozeduraufrufe.
Simple statements:
X := Y + 10; // assignment
ShowMessage('Hello World!'); // procedure call
Eine zusammengesetzte Anweisung besteht aus mehreren Anweisungen.
Compound statements:
Begin
If A > B Then ShowMessage('A is bigger');
Else ShowMessage('B is bigger');
A := 0;
B := 0;
End;
Bedingte Anweisungen
DelphiScript verfügt über Steueranweisungen, die den Ablauf der Ausführung innerhalb eines Skripts beeinflussen. Die gebräuchlichste Steueranweisung ist die bedingte If..Then-Anweisung.
If-Then-Anweisung
Die If..Then-Anweisung wird zur bedingten Steuerung verwendet. Die Syntax lautet:
If Condition Then
Begin
// code here
End
Else
Begin
// code here
End;
Case-Of-Anweisung
Um eine komplexe Folge von If-Anweisungen zu vermeiden, können diese häufig durch Case-Anweisungen ersetzt werden. Eine Case-Anweisung in einem Ausdruck wird verwendet, um einen Wert, eine Liste möglicher Werte oder einen Wertebereich auszuwählen.
In einer Case-Anweisung können beliebige Typen verwendet werden, da DelphiScript eine untypisierte Sprache ist. Case-Anweisungen können eine Else-Anweisung enthalten, die ausgeführt wird, wenn keines der Labels dem Wert des Selektors entspricht (innerhalb der Case-Of-Bedingung).
Example 1:
Case Char of
'+' : Text := 'Plus sign';
'-' : Text := 'Minus sign';
'*', '/': Text := 'Multiplication or division';
'0'..'9': Text := 'Number';
'a'..'z': Text := 'Lowercase character';
'A'..'Z': Text := 'Uppercase character';
else
Text := 'Unknown character';
End;
Example 2:
Case UserName of
'Jack', 'Joe' : IsAdministrator := true;
'Fred' : IsAdministrator := false;
else
Raise('Unknown User');
End;
With-Anweisung
Die With-Anweisung ist eine Kurzschreibweise in DelphiScript. Wenn auf eine Variable eines Record-Typs (oder ein Objekt) verwiesen wird, kann eine „with“-Anweisung verwendet werden, anstatt den Namen jedes Mal zu wiederholen.
Normal version:
Form.Canvas.Pen.Width := 2;
Form.Canvas.Pen.Color := clSilver;
Version using With:
With Form.Canvas.Pen do
Begin
Width := 2;
Color := clSilver;
End;
For-To-Do-Schleife
Die For..To..Do-Anweisung bietet eine Methode, um wiederholt einen Codeblock (eine oder mehrere Codezeilen) zu durchlaufen. Die grundlegende Syntax lautet:
For counter := start To end Do
Begin
// code here
End;
ForFor..To..Do-Schleifen werden häufig verwendet, um ein Array zu initialisieren. Die Zählrichtung in einer For..To..Do-Schleife kann alternativ durch Verwendung des Schlüsselworts DownTo zum Herunterzählen der Schleife gesteuert werden. DelphiScript stellt die Break/Exit-Anweisung bereit, um eine For..To..Do-Schleife vorzeitig zu verlassen.
Repeat-Until-Schleife
Die Repeat-Anweisung wird wiederholt ausgeführt, bis der boolesche Ausdruck wahr ist. Die Repeat-Anweisung wird immer mindestens einmal ausgeführt.
Example:
Repeat
Write('Enter a value (0..9): ');
ShowMessage(IntToStr(I));
Until (I >= 0) and (I <= 9);
While-Do-Schleife
Eine While-Anweisung ist einer Repeat-Anweisung ähnlich, mit dem Unterschied, dass die Steuerbedingung vor der ersten Ausführung der Anweisungsfolge ausgewertet wird. Wenn die Bedingung also falsch ist, wird die Anweisungsfolge niemals ausgeführt.
Example:
Randomize;
I := 0;
While I < 1000 do
Begin
I := I + Random (100);
Add ('Random Number: ' + IntToStr (I));
End;
Continue-Anweisung
Die Continue-Anweisung überspringt den Rumpf einer Schleife, ähnlich wie die Goto-Anweisung. Die Continue-Anweisung bewirkt, dass das ausgeführte Skript zur nächsten Iteration in der aktuellen For-, While- oder Repeat-Schleife übergeht.
Example:
var
F: File;
i: Integer;
Begin
For i := 0 to (FileListBox1.Items.Count - 1) do
Begin
Try
If FileListBox1.Selected[i] Then
Begin
If not FileExists(FileListBox1.Items.Strings[i]) then
Begin
MessageDlg('File: ' + FileListBox1.Items.Strings[i] + 'not found', mtError, [mbOk], 0);
Continue;
End;
AssignFile(F, FileListBox1.Items.Strings[i]);
Reset(F, 1);
ListBox1.Items.Add(IntToStr(FileSize(F)));
CloseFile(F);
End;
Finally
{ do something here }
End;
End;
End;
Goto-Label-Anweisung
Die Goto-Anweisung hat die Form Goto label und überträgt die Skriptausführung an die mit dem angegebenen Label markierte Anweisung. Um eine Anweisung zu markieren, muss das Label zuerst deklariert werden; anschließend wird der Zielanweisung das Label und ein Doppelpunkt vorangestellt: label: statement
Ein Label kann jeder gültige Bezeichner sein. Die Label-Deklaration und die Goto-Anweisung müssen zum selben Codeblock innerhalb eines Skripts gehören. Daher ist es nicht möglich, in eine Prozedur oder Funktion hinein- oder aus ihr herauszuspringen.
Example:
Label StartHere;
// code
StartHere: Beep;
Goto StartHere;
Exit-Anweisung
Die Exit-Anweisung kehrt sofort aus einer Funktion oder Prozedur zurück. Wenn Sie Exit innerhalb eines Try..Finally-Blocks aufrufen, wird der Finally-Teil ausgeführt, bevor die Unterroutine zurückkehrt. Wenn die Prozedur Exit innerhalb des Hauptteils des Skripts aufgerufen wird, wird die Ausführung des Skripts beendet.
Example:
Begin
Server := SchServer;
If Server = Nil Then
Begin
ShowError('No SchServer started');
Exit;
End;
Break-Anweisung
Die Break-Anweisung bewirkt, dass das ausgeführte Skript die aktuelle For-, While- oder Repeat-Schleife verlässt. Die Skriptausführung wird mit der nächsten ausführbaren Zeile nach der aktuellen Schleife fortgesetzt.
Example:
Var
S: string;
Begin
While True do
Begin
ReadLn(S);
Try
if S = '' then Break;
WriteLn(S);
Finally
{ do something for all cases }
End;
End;
End;
DelphiScript-Ausdrucksoperatoren
Im Allgemeinen ist ein Ausdruck eine gültige Kombination aus Konstanten, Variablen, Literalwerten, Operatoren und Funktionsergebnissen. Ausdrücke werden verwendet, um den Wert zu bestimmen, der einer Variablen zugewiesen werden soll, um den Parameter einer Funktion zu berechnen oder um eine Bedingung zu prüfen. Ausdrücke können Funktionsaufrufe enthalten.
DelphiScript verfügt über eine Reihe logischer, arithmetischer, boolescher und relationaler Operatoren. Diese Operatoren sind nach ihrer Prioritätsreihenfolge gruppiert (siehe unten), die sich von den in Basic, C usw. verwendeten Prioritätsreihenfolgen unterscheidet. Beispielsweise haben die Operatoren AND und OR Vorrang vor relationalen Operatoren.
Wenn Sie a<b and c<d schreiben, führt DelphiScript zuerst die Operation AND aus, was zu einem Fehler führt. Um dieses Problem zu vermeiden und die Priorität festzulegen, muss jeder <-Ausdruck in Klammern gesetzt werden: (a<b) and (c<d);
Die unten aufgeführten unterstützten DelphiScript-Operatoren sind in ihrer Prioritätsreihenfolge dargestellt.
Nach Priorität gruppierte Operatoren
Beachten Sie, dass unäre Operatoren die höchste Priorität haben.
|
Boolesches oder bitweises NOT. |
Multiplicative and Bitwise Operators
* |
Arithmetische Multiplikation. |
|
Gleitkommadivision. |
|
Ganzzahldivision. |
|
Modulo (Rest der Ganzzahldivision). |
|
Boolesches oder bitweises AND. |
|
Bitweise Linksverschiebung. |
|
Bitweise Rechtsverschiebung. |
Additive Operators
|
Arithmetische Addition, Zeichenkettenverkettung. |
- |
Arithmetische Subtraktion. |
|
Boolesches oder bitweises OR |
|
Boolesches oder bitweises EXKLUSIVES ODER. |
Relational and Comparison Operators (lowest precedence)
|
Prüft, ob gleich oder nicht. |
|
Prüft, ob ungleich oder nicht. |
|
Prüft, ob kleiner als oder nicht. |
|
Prüft, ob größer als oder nicht. |
|
Prüft, ob kleiner oder gleich oder nicht. |
|
Prüft, ob größer oder gleich oder nicht. |
Beachten Sie außerdem, dass die Operatoren ^ und @ von DelphiScript nicht unterstützt werden.