Funzioni
Di seguito sono descritte le istruzioni di funzione comuni utilizzate dal linguaggio DelphiScript. La gamma di funzioni di DelphiScript è presentata in sezioni dedicate alle routine FileIO, alle routine matematiche, alle routine per le stringhe e alle routine di estensione.
Calcolo di espressioni con la funzione Evaluate
La funzione incorporata Evaluate interpreta una stringa contenente un’espressione matematica valida durante il runtime e restituisce un risultato. Ad esempio, è possibile scrivere uno script come Evaluate(ProcNames[ProcIndex]); e verrà chiamata la procedura specificata in ProcNames[ProcIndex].
Per calcolare un’espressione di questo tipo, è possibile usare il metodo Evaluate dove l’espressione è specificata dal parametro Expr. Ad esempio, è possibile calcolare espressioni come le seguenti:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
Passaggio di parametri a funzioni e procedure
Sia le funzioni sia le procedure definite in uno script possono essere dichiarate in modo da accettare parametri. Inoltre, le funzioni sono definite per restituire un valore. I tipi dei parametri nelle dichiarazioni di procedure/funzioni vengono ignorati e possono essere omessi. Ad esempio, questo codice è corretto:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
Uscita da una procedura
DelphiScript fornisce le istruzioni Exit e Break per forzare l’uscita da una procedura prima che termini naturalmente. Ad esempio, se il valore di un parametro non è adatto, si potrebbe voler mostrare un avviso all’utente e uscire, come mostra l’esempio seguente.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
Routine di I/O file
DelphiScript dispone delle seguenti routine di I/O:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript consente di scrivere informazioni in un file di testo e, poiché DelphiScript è un linguaggio non tipizzato, tutti i valori devono prima essere convertiti in stringhe.
Qui, le routine Read e ReadLn sono equivalenti: leggono una riga fino alla riga successiva, esclusa. Una routine Writeln(String) è equivalente a una routine Write(S) e Write(LineFeed + CarriageReturn).
Per scrivere un file di testo, utilizzare le procedure AssignFile, ReWrite, Writeln e CloseFile. Per leggere un file di testo, utilizzare le procedure AssignFile, Reset, Readln e CloseFile. L’esempio seguente scrive in un file di testo e aggiunge un marcatore di fine riga. Si consiglia di usare il blocco Try / Finally / End per rendere gli script sicuri in caso di errore di I/O.
Example:
Var
InputFile : TextFile;
OutputFile : TextFile;
I : Integer;
Line : String;
Begin
AssignFile(OutputFile,eConvertedFile.Text);
Rewrite(OutputFile);
AssignFile(InputFIle,eOriginalFIle.Text);
Reset(InputFile);
Try
While not EOF(InputFile) do
Begin
Readln(InputFile,Line);
For I := 1 to Length(Line) Do
Line[I] := UpperCase(Line[I]);
Writeln(Outputfile, Line);
End;
Finally
CloseFile(InputFile);
CloseFile(OutputFile);
End;
End;
Routine matematiche
DelphiScript dispone delle seguenti routine matematiche:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Routine per le stringhe
DelphiScript dispone delle seguenti routine per le stringhe, che possono manipolare stringhe o caratteri. Nella tabella seguente è mostrato solo un sottoinsieme delle routine per le stringhe (la maggior parte delle routine per le stringhe usate da DelphiScript è importata dall’unità SysUtils di Embarcadero Delphi):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Le routine per le stringhe not supportate da DelphiScript sono riportate nella tabella seguente:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Routine di estensione
Le routine di estensione vengono utilizzate quando si gestiscono processi server (un comando è un processo server confezionato con eventuali parametri) negli script, soprattutto se è necessario estrarre o impostare stringhe per i parametri dei processi. Alcune delle routine sono elencate di seguito.
Per eseguire i parametri dei processi in uno script, potrebbero essere necessarie le seguenti funzioni:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
Uso degli insiemi in DelphiScript
Le parole chiave Set e In di Embarcadero Delphi, e gli operatori di insieme +, -, *, <= e >=, non sono supportati in DelphiScript. Le parole chiave equivalenti per gli operatori di insieme sono riportate nella tabella seguente.
DelphiScript non dispone di tipi insieme. Per usare gli insiemi negli script DelphiScript, utilizzare le funzioni incorporate MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection e SubSet, che consentono di manipolare gli insiemi in uno script DelphiScript. Queste sono descritte più dettagliatamente di seguito.
Operatori di insieme
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
Funzione MkSet
La funzione MkSet è un costruttore di insiemi con un numero variabile di argomenti. Ad esempio:
Font.Style = MkSet(fsBold,fsItalic);
Qui MkSet(fsBold,fsItalic) indica solo due elementi dell’insieme: fsBold e fsItalic.
Funzione MkSetRange
La funzione MkSetRange è un costruttore di insiemi con un intervallo di argomenti. Ad esempio:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
La funzione MkSetRange(eTopLayer,eBottomLayer) indica un intervallo di layer da eTopLayer a eBottomLayer.
Funzione InSet
Questa funzione InSet viene utilizzata in sostituzione dell’operatore In di Delphi. A in B è equivalente a InSet(A, B).
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
Funzione SetUnion
La funzione SetUnion viene utilizzata in sostituzione dell’operatore + di Delphi. A + B è equivalente a SetUnion(A, B).
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
Funzione SetDifference
La funzione SetDifference viene utilizzata in sostituzione dell’operatore - di Delphi. A - B è equivalente a SetDifference(A, B).
Funzione SetIntersection
La funzione SetIntersection viene utilizzata in sostituzione dell’operatore * di Delphi. A * B è equivalente a SetIntersection(A, B).
Funzione SubSet
La funzione SubSet viene utilizzata in sostituzione dell’operatore <= di Object Pascal. A <= B è equivalente a SubSet(A, B).
Uso dei gestori di eccezioni
La parola chiave Try introduce un’istruzione Try-Except o un’istruzione Try-Finally. Queste due istruzioni sono correlate ma hanno scopi diversi:
Try-Finally
Con Try-Finally, le istruzioni nel blocco Finally vengono sempre eseguite indipendentemente dal fatto che si verifichi un’eccezione nel blocco Try, oppure un Exit o un Break. Utilizzare il blocco Try-Finally per liberare oggetti temporanei e altre risorse e per eseguire attività di pulizia.
In genere, in una subroutine è necessaria una sola istruzione Try-Finally.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Utilizzare Try-Except per gestire casi eccezionali. Ad esempio, per intercettare eccezioni specifiche e fare qualcosa di utile con esse, come registrarle in un log degli errori o creare una finestra di dialogo intuitiva. Poiché la parola chiave On non è supportata in DelphiScript, all’interno del blocco Except viene utilizzata l’istruzione Raise.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
La parola chiave Raise è correlata alla parola chiave Try. La parola chiave Raise può essere usata senza parametri per rilanciare l’ultima eccezione. Può anche essere usata con un parametro stringa per generare un’eccezione con un messaggio specifico.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
Si noti che, poiché la parola chiave On non è supportata, gli oggetti Exception (disponibili in Embarcadro Delphi) non possono essere utilizzati.