Funkcje
Poniżej omówiono typowe instrukcje funkcji używane w języku DelphiScript. Zakres funkcji DelphiScript przedstawiono w sekcjach dotyczących procedur FileIO, procedur matematycznych, procedur łańcuchowych oraz procedur rozszerzeń.
Obliczanie wyrażeń za pomocą funkcji Evaluate
Wbudowana funkcja Evaluate interpretuje w czasie wykonywania ciąg znaków zawierający poprawne wyrażenie matematyczne i zwraca wynik. Na przykład możesz napisać skrypt taki jak Evaluate(ProcNames[ProcIndex]);, a procedura określona w ProcNames[ProcIndex] zostanie wywołana.
Aby obliczyć takie wyrażenie, możesz użyć metody Evaluate, gdzie wyrażenie jest określone przez parametr Expr. Na przykład możesz obliczać wyrażenia takie jak poniższe:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
Przekazywanie parametrów do funkcji i procedur
Zarówno funkcje, jak i procedury zdefiniowane w skrypcie mogą być zadeklarowane tak, aby przyjmowały parametry. Dodatkowo funkcje są definiowane tak, aby zwracały wartość. Typy parametrów w deklaracjach procedur/funkcji są ignorowane i można je pominąć. Na przykład poniższy kod jest poprawny:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
Wychodzenie z procedury
DelphiScript udostępnia instrukcje Exit i Break, aby wymusić zakończenie procedury, zanim zakończyłaby się naturalnie. Na przykład, jeśli wartość parametru nie jest odpowiednia, możesz chcieć wyświetlić użytkownikowi ostrzeżenie i zakończyć działanie, jak pokazuje poniższy przykład.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
Procedury File IO
DelphiScript ma następujące procedury IO:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript umożliwia zapisywanie informacji do pliku tekstowego, a ponieważ DelphiScript jest językiem nietypowanym, wszystkie wartości muszą zostać najpierw przekonwertowane na łańcuchy znaków.
Tutaj procedury Read i ReadLn są równoważne — odczytują wiersz aż do, ale nie włącznie z, następnym znakiem nowej linii. Procedura Writeln(String) jest równoważna procedurom Write(S) i Write(LineFeed + CarriageReturn).
Aby zapisać plik tekstowy, użyj procedur AssignFile, ReWrite, Writeln oraz CloseFile. Aby odczytać plik tekstowy, użyj procedur AssignFile, Reset, Readln oraz CloseFile. Poniższy przykład zapisuje do pliku tekstowego i dodaje znacznik końca linii. Zaleca się użycie bloku Try / Finally / End w celu zabezpieczenia skryptów na wypadek awarii IO.
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;
Procedury matematyczne
DelphiScript ma następujące procedury matematyczne:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Procedury łańcuchowe
DelphiScript ma następujące procedury łańcuchowe, które mogą manipulować łańcuchami znaków lub znakami. W poniższej tabeli pokazano tylko podzbiór procedur łańcuchowych (większość procedur łańcuchowych używanych przez DelphiScript jest importowana z jednostki SysUtils Embarcadero Delphi):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Procedury łańcuchowe, które są not obsługiwane przez DelphiScript, przedstawiono w poniższej tabeli:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Procedury rozszerzeń
Procedury rozszerzeń są używane podczas pracy z procesami serwera (polecenie to opakowany proces serwera z parametrami, jeśli występują) w skryptach, szczególnie jeśli trzeba wyodrębnić lub ustawić łańcuchy znaków dla parametrów procesów. Niektóre z procedur wymieniono poniżej.
Aby wykonywać parametry procesów w skrypcie, mogą być potrzebne następujące funkcje:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
Używanie zbiorów w DelphiScript
Słowa kluczowe Embarcadero Delphi Set i In oraz operatory zbiorów +, -, *, <= i >= nie są obsługiwane w DelphiScript. Równoważne słowa kluczowe operatorów zbiorów zestawiono w poniższej tabeli.
DelphiScript nie ma typów zbiorów. Aby używać zbiorów w skryptach DelphiScript, użyj wbudowanych funkcji: MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection oraz SubSet, które umożliwiają manipulowanie zbiorami w skrypcie DelphiScript. Poniżej opisano je bardziej szczegółowo.
Operatory zbiorów
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
Funkcja MkSet
Funkcja MkSet jest konstruktorem zbioru z zmienną liczbą argumentów. Na przykład:
Font.Style = MkSet(fsBold,fsItalic);
MkSet(fsBold,fsItalic) oznacza tutaj tylko dwa elementy zbioru: fsBold i fsItalic.
Funkcja MkSetRange
Funkcja MkSetRange jest konstruktorem zbioru z zakresem argumentów. Na przykład:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
Funkcja MkSetRange(eTopLayer,eBottomLayer) oznacza zakres warstw od eTopLayer do eBottomLayer.
Funkcja InSet
Ta funkcja InSet jest używana jako zamiennik operatora Delphi In. A in B jest równe InSet(A, B).
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
Funkcja SetUnion
Funkcja SetUnion jest używana jako zamiennik operatora Delphi + . A + B jest równe SetUnion(A, B).
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
Funkcja SetDifference
Funkcja SetDifference jest używana jako zamiennik operatora Delphi - . A - B jest równe SetDifference(A, B).
Funkcja SetIntersection
Funkcja SetIntersection jest używana jako zamiennik operatora Delphi * . A * B jest równe SetIntersection(A, B).
Funkcja SubSet
Funkcja SubSet jest używana jako zamiennik operatora Object Pascal <=. A <= B jest równe SubSet(A, B).
Używanie obsługi wyjątków
Słowo kluczowe Try wprowadza instrukcję Try-Except lub Try-Finally. Te dwie instrukcje są powiązane, ale służą różnym celom:
Try-Finally
W Try-Finally instrukcje w bloku Finally są zawsze wykonywane niezależnie od tego, czy wystąpi wyjątek z bloku Try, czy nastąpi Exit lub Break. Użyj bloku Try-Finally do zwalniania obiektów tymczasowych i innych zasobów oraz do wykonywania czynności porządkowych.
Zazwyczaj w podprogramie potrzebna jest tylko jedna instrukcja Try-Finally.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Użyj Try-Except do obsługi przypadków wyjątkowych. Na przykład, aby przechwycić określone wyjątki i zrobić z nimi coś użytecznego, np. zapisać je w dzienniku błędów lub utworzyć przyjazne okno dialogowe. Ponieważ słowo kluczowe On nie jest obsługiwane w DelphiScript, instrukcja Raise jest używana wewnątrz bloku Except.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
Słowo kluczowe Raise jest powiązane ze słowem kluczowym Try. Słowo kluczowe Raise może być użyte bez parametrów do ponownego zgłoszenia ostatniego wyjątku. Może też być użyte z parametrem typu string, aby zgłosić wyjątek z określonym komunikatem.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
Zwróć uwagę, że ponieważ słowo kluczowe On nie jest obsługiwane, obiekty Exception (dostępne w Embarcadro Delphi) nie mogą być używane.