Функции
Ниже рассматриваются наиболее распространённые операторы функций, используемые в языке DelphiScript. Набор функций DelphiScript представлен в разделах, посвящённых процедурам FileIO, математическим процедурам, строковым процедурам и процедурам расширений.
Вычисление выражений с помощью функции Evaluate
Встроенная функция Evaluate интерпретирует строку, содержащую корректное математическое выражение, во время выполнения и возвращает результат. Например, вы можете написать скрипт вида Evaluate(ProcNames[ProcIndex]);, и будет вызвана процедура, указанная в ProcNames[ProcIndex].
Чтобы вычислить такое выражение, можно использовать метод Evaluate, где выражение задаётся параметром Expr. Например, можно вычислять выражения, подобные следующим:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
Передача параметров в функции и процедуры
И функции, и процедуры, определённые в скрипте, можно объявлять так, чтобы они принимали параметры. Кроме того, функции определяются так, чтобы возвращать значение. Типы параметров в объявлениях процедур/функций игнорируются и могут быть опущены. Например, следующий код корректен:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
Выход из процедуры
DelphiScript предоставляет операторы Exit и Break, чтобы принудительно завершить процедуру до её естественного окончания. Например, если значение параметра не подходит, можно вывести пользователю предупреждение и выйти, как показано в примере ниже.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
Процедуры File IO
DelphiScript имеет следующие процедуры ввода-вывода:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DelphiScript позволяет записывать информацию в текстовый файл, и поскольку DelphiScript — нетипизированный язык, все значения сначала необходимо преобразовать в строки.
Здесь процедуры Read и ReadLn эквивалентны — они читают строку до следующего перевода строки, но не включая его. Процедура Writeln(String) эквивалентна Write(S) и процедуре Write(LineFeed + CarriageReturn).
Для записи текстового файла используйте процедуры AssignFile, ReWrite, Writeln и CloseFile. Для чтения текстового файла используйте процедуры AssignFile, Reset, Readln и CloseFile. Пример ниже записывает в текстовый файл и добавляет маркер конца строки. Рекомендуется использовать блок Try / Finally / End, чтобы сделать скрипты надёжными в случае сбоя ввода-вывода.
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;
Математические процедуры
DelphiScript имеет следующие математические процедуры:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Строковые процедуры
DelphiScript имеет следующие строковые процедуры, которые могут манипулировать строками или символами. В таблице ниже показана лишь часть строковых процедур (большинство строковых процедур, используемых DelphiScript, импортируются из модуля SysUtils Embarcadero Delphi):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Строковые процедуры, которые not поддерживаются DelphiScript, приведены в таблице ниже:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Процедуры расширений
Процедуры расширений используются при работе в скриптах с серверными процессами (команда — это упакованный серверный процесс с параметрами, если они есть), особенно если нужно извлекать или задавать строки для параметров процессов. Некоторые из процедур перечислены ниже.
Для выполнения параметров процессов в скрипте могут потребоваться следующие функции:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
Использование множеств в DelphiScript
Ключевые слова Set и In из Embarcadero Delphi, а также операторы множеств +, -, *, <= и >= в DelphiScript не поддерживаются. Эквивалентные ключевые слова операторов множеств приведены в таблице ниже.
В DelphiScript нет типов множеств. Чтобы использовать множества в скриптах DelphiScript, применяйте встроенные функции: MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection и SubSet, которые позволяют выполнять операции с множествами в скрипте DelphiScript. Ниже они описаны подробнее.
Операторы множеств
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
Функция MkSet
Функция MkSet — это конструктор множества с переменным числом аргументов. Например:
Font.Style = MkSet(fsBold,fsItalic);
Обозначение MkSet(fsBold,fsItalic) здесь указывает только на два элемента множества: fsBold и fsItalic.
Функция MkSetRange
Функция MkSetRange — это конструктор множества с диапазоном аргументов. Например:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
Функция MkSetRange(eTopLayer,eBottomLayer) обозначает диапазон слоёв от eTopLayer до eBottomLayer.
Функция InSet
Функция InSet используется как замена оператора In в Delphi. A in B эквивалентно InSet(A, B).
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
Функция SetUnion
Функция SetUnion используется как замена оператора + в Delphi. A + B эквивалентно SetUnion(A, B).
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
Функция SetDifference
Функция SetDifference используется как замена оператора - в Delphi. A - B эквивалентно SetDifference(A, B).
Функция SetIntersection
Функция SetIntersection используется как замена оператора * в Delphi. A * B эквивалентно SetIntersection(A, B).
Функция SubSet
Функция SubSet используется как замена оператора <= в Object Pascal. A <= B эквивалентно SubSet(A, B).
Использование обработчиков исключений
Ключевое слово Try вводит оператор Try-Except или Try-Finally. Эти два оператора связаны, но служат разным целям:
Try-Finally
При использовании Try-Finally операторы в блоке Finally выполняются всегда — независимо от того, произошло ли исключение в блоке Try, или был выполнен Exit либо Break. Используйте блок Try-Finally для освобождения временных объектов и других ресурсов и для выполнения действий по очистке.
Обычно в подпрограмме требуется только один оператор Try-Finally.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Используйте Try-Except для обработки исключительных ситуаций. Например, чтобы перехватывать конкретные исключения и делать с ними что-то полезное — например, записывать их в журнал ошибок или создавать понятное пользователю диалоговое окно. Поскольку ключевое слово On в DelphiScript не поддерживается, внутри блока Except используется оператор Raise.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
Ключевое слово Raise связано с ключевым словом Try. Ключевое слово Raise можно использовать без параметров, чтобы повторно сгенерировать последнее исключение. Также его можно использовать со строковым параметром, чтобы сгенерировать исключение с заданным сообщением.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
Обратите внимание: поскольку ключевое слово On не поддерживается, объекты Exception (доступные в Embarcadro Delphi) использовать нельзя.