Istruzioni e operatori
Istruzioni DelphiScript
Un’istruzione in DelphiScript è considerata "semplice" quando non contiene altre istruzioni. Esempi di istruzioni semplici sono le istruzioni di assegnazione e le chiamate di procedura.
Simple statements:
X := Y + 10; // assignment
ShowMessage('Hello World!'); // procedure call
Un’istruzione composta è costituita da più istruzioni.
Compound statements:
Begin
If A > B Then ShowMessage('A is bigger');
Else ShowMessage('B is bigger');
A := 0;
B := 0;
End;
Istruzioni condizionali
DelphiScript dispone di istruzioni di controllo che influenzano il flusso di esecuzione all’interno di uno script. L’istruzione di controllo più comune è l’istruzione condizionale If..Then.
Istruzione If Then
L’istruzione If..Then viene utilizzata per il controllo condizionale. La sintassi è:
If Condition Then
Begin
// code here
End
Else
Begin
// code here
End;
Istruzione Case Of
Per evitare un insieme complesso di istruzioni If, queste possono spesso essere sostituite con istruzioni Case. Un’istruzione case in un’espressione viene utilizzata per selezionare un valore, un elenco di valori possibili o un intervallo di valori.
In un’istruzione Case possono essere utilizzati tipi di qualsiasi genere perché DelphiScript è un linguaggio non tipizzato. Le istruzioni Case possono avere un’istruzione Else che viene eseguita se nessuna delle etichette corrisponde al valore del selettore (all’interno della condizione Case Of).
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;
Istruzione With
L’istruzione With è una forma abbreviata di DelphiScript. Quando si fa riferimento a una variabile di tipo record (o a un oggetto), è possibile usare un’istruzione "with" invece di ripeterne ogni volta il nome.
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;
Ciclo For To Do
L’istruzione For..To..Do fornisce un metodo per eseguire ripetutamente un ciclo attraverso un blocco di codice (una o più righe di codice). La sintassi di base è:
For counter := start To end Do
Begin
// code here
End;
ForI cicli sono spesso utilizzati per inizializzare un array. La direzione del contatore in un ciclo For..To..Do può essere controllata utilizzando in alternativa la parola chiave DownTo per decrementare il ciclo. DelphiScript fornisce l’istruzione Break/Exit per uscire anticipatamente da un ciclo For..To..Do.
Ciclo Repeat Until
L’istruzione Repeat viene eseguita ripetutamente finché l’espressione booleana non è vera. L’istruzione Repeat viene sempre eseguita almeno una volta.
Example:
Repeat
Write('Enter a value (0..9): ');
ShowMessage(IntToStr(I));
Until (I >= 0) and (I <= 9);
Ciclo While Do
Un’istruzione While è simile a un’istruzione Repeat tranne per il fatto che la condizione di controllo viene valutata prima della prima esecuzione della sequenza di istruzioni. Pertanto, se la condizione è falsa, la sequenza di istruzioni non viene mai eseguita.
Example:
Randomize;
I := 0;
While I < 1000 do
Begin
I := I + Random (100);
Add ('Random Number: ' + IntToStr (I));
End;
Istruzione Continue
L’istruzione Continue salta il corpo di un ciclo, in modo simile all’istruzione Goto. L’istruzione continue fa sì che lo script in esecuzione passi all’iterazione successiva nel ciclo corrente For, While o Repeat.
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;
Istruzione Goto Label
L’istruzione Goto ha la forma Goto label e trasferisce l’esecuzione dello script all’istruzione contrassegnata dall’etichetta specificata. Per contrassegnare un’istruzione, l’etichetta deve essere prima dichiarata e quindi l’istruzione di destinazione deve essere preceduta dall’etichetta e da due punti: label: statement
Un’etichetta può essere qualsiasi identificatore valido. La dichiarazione dell’etichetta e l’istruzione Goto devono appartenere allo stesso blocco di codice all’interno di uno script. Pertanto non è possibile saltare all’interno o all’esterno di una procedura o funzione.
Example:
Label StartHere;
// code
StartHere: Beep;
Goto StartHere;
Istruzione Exit
L’istruzione Exit restituisce immediatamente il controllo da una funzione o procedura. Se si chiama Exit dall’interno di un blocco Try..Finally, la parte Finally viene eseguita prima che la subroutine restituisca il controllo. Se la procedura Exit viene chiamata dall’interno del corpo principale dello script, l’esecuzione dello script terminerà.
Example:
Begin
Server := SchServer;
If Server = Nil Then
Begin
ShowError('No SchServer started');
Exit;
End;
Istruzione Break
L’istruzione Break fa sì che lo script in esecuzione esca dal ciclo corrente For, While o Repeat. L’esecuzione dello script continua dalla riga eseguibile successiva dopo il ciclo corrente.
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;
Operatori di espressione DelphiScript
In generale, un’espressione è una combinazione valida di costanti, variabili, valori letterali, operatori e risultati di funzione. Le espressioni vengono utilizzate per determinare il valore da assegnare a una variabile, per calcolare il parametro di una funzione o per verificare una condizione. Le espressioni possono includere chiamate di funzione.
DelphiScript dispone di numerosi operatori logici, aritmetici, booleani e relazionali. Questi operatori sono raggruppati in base all’ordine di precedenza (vedi sotto), che è diverso dagli ordini di precedenza utilizzati da Basic, C, ecc. Ad esempio, gli operatori AND e OR hanno precedenza rispetto a quelli relazionali.
Se si scrive a<b and c<d, DelphiScript eseguirà prima l’operazione AND, generando un errore. Per evitare questo problema e definire la priorità, ogni espressione < deve essere racchiusa tra parentesi: (a<b) and (c<d);
Gli operatori DelphiScript supportati elencati di seguito sono mostrati in ordine di precedenza.
Operatori raggruppati per precedenza
Si noti che gli operatori unari hanno la precedenza più alta.
|
NOT booleano o bit a bit. |
Multiplicative and Bitwise Operators
* |
Moltiplicazione aritmetica. |
|
Divisione in virgola mobile. |
|
Divisione intera. |
|
modulo (resto della divisione intera). |
|
AND booleano o bit a bit. |
|
Shift a sinistra bit a bit. |
|
Shift a destra bit a bit. |
Additive Operators
|
Addizione aritmetica, concatenazione di stringhe. |
- |
Sottrazione aritmetica. |
|
OR booleano o bit a bit |
|
XOR booleano o bit a bit. |
Relational and Comparison Operators (lowest precedence)
|
Verifica se è uguale o meno. |
|
Verifica se non è uguale o meno. |
|
Verifica se è minore o meno. |
|
Verifica se è maggiore o meno. |
|
Verifica se è minore o uguale o meno. |
|
Verifica se è maggiore o uguale o meno. |
Si noti inoltre che gli operatori ^ e @ non sono supportati da DelphiScript.