Funções
As instruções de função comuns utilizadas pela linguagem DelphiScript são apresentadas abaixo. O conjunto de funções do DelphiScript é apresentado em secções para rotinas de FileIO, rotinas matemáticas, rotinas de strings e rotinas de extensão.
Cálculo de Expressões com a Função Evaluate
A função incorporada Evaluate interpreta uma string que contém uma expressão matemática válida durante o tempo de execução e é devolvido um resultado. Por exemplo, pode escrever um script como Evaluate(ProcNames[ProcIndex]); e o procedimento especificado em ProcNames[ProcIndex] será chamado.
Para calcular essa expressão, pode utilizar o método Evaluate em que a expressão é especificada pelo parâmetro Expr. Por exemplo, pode calcular expressões como as seguintes:
Evaluate('2+5');
Evaluate('((10+15)-5)/2*5');
Evaluate('sin(3.1415926/2)*10');
Evaluate('2.5*log(3)');
Passagem de Parâmetros para Funções e Procedimentos
Tanto as funções como os procedimentos definidos num script podem ser declarados para aceitar parâmetros. Além disso, as funções são definidas para devolver um valor. Os tipos de parâmetros nas declarações de procedimento/função são ignorados e podem ser omitidos. Por exemplo, este código está correto:
Function sum(a, b) : integer;
Begin
Result := a + b;
End;
Sair de um Procedimento
O DelphiScript fornece as instruções Exit e Break para forçar a saída de um procedimento antes de este terminar naturalmente. Por exemplo, se o valor de um parâmetro não for adequado, poderá querer emitir um aviso ao utilizador e sair, como mostra o exemplo abaixo.
Procedure DisplayName (s);
Begin
If s = '' Then
Begin
ShowMessage('Please enter a name');
Exit;
End;
ShowMessage(S + ' is shown');
End;
Rotinas de IO de Ficheiros
O DelphiScript tem as seguintes rotinas de IO:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
O DelphiScript permite-lhe escrever informações num ficheiro de texto e, como o DelphiScript é uma linguagem sem tipos, todos os valores têm primeiro de ser convertidos em strings.
Aqui, as rotinas Read e ReadLn são equivalentes — leem uma linha até, mas sem incluir, a linha seguinte. Uma rotina Writeln(String) é equivalente a uma rotina Write(S) e Write(LineFeed + CarriageReturn).
Para escrever num ficheiro de texto, utilize os procedimentos AssignFile, ReWrite, Writeln e CloseFile. Para ler um ficheiro de texto, utilize os procedimentos AssignFile, Reset, Readln e CloseFile. O exemplo abaixo escreve num ficheiro de texto e adiciona um marcador de fim de linha. Recomenda-se a utilização do bloco Try / Finally / End para tornar os scripts seguros no caso de uma falha de 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;
Rotinas Matemáticas
O DelphiScript tem as seguintes rotinas matemáticas:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rotinas de Strings
O DelphiScript tem as seguintes rotinas de strings, que podem manipular strings ou caracteres. Apenas um subconjunto das rotinas de strings (a maioria das rotinas de strings utilizadas pelo DelphiScript é importada da unidade SysUtils do Embarcadero Delphi) é apresentado na tabela abaixo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
As rotinas de strings que são not suportadas pelo DelphiScript estão indicadas na tabela abaixo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rotinas de Extensão
As rotinas de extensão são utilizadas ao lidar com processos de servidor (um comando é um processo de servidor empacotado com parâmetros, caso existam) em scripts, especialmente se precisar de extrair ou definir strings para os parâmetros dos processos. Algumas das rotinas estão listadas abaixo.
Para executar parâmetros de processos num script, poderão ser necessárias as seguintes funções:
|
|
|
|
|
|
|
|
|
Useful functions:
|
|
|
|
|
|
|
|
|
Useful dialogs:
|
|
|
|
|
|
Utilizar Conjuntos no DelphiScript
As palavras-chave Set e In do Embarcadero Delphi, e os operadores de conjunto +, -, *, <= e >=, não são suportados no DelphiScript. As palavras-chave equivalentes dos Operadores de Conjunto estão indicadas na tabela abaixo.
O DelphiScript não tem tipos de conjunto. Para utilizar conjuntos em scripts DelphiScript, use as funções incorporadas MkSet, MkSetRange, InSet, SetUnion, SetDifference, SetIntersection e SubSet, que permitem manipular conjuntos num script DelphiScript. Estas são descritas com mais detalhe abaixo.
Operadores de Conjunto
Embarcadero Delphi Set Operator keyword |
Equivalent DelphiScript Set Operator keyword |
|---|---|
|
|
- |
|
* |
|
|
|
|
|
|
|
|
|
Função MkSet
A função MkSet é um construtor de conjuntos com um número variável de argumentos. Por exemplo:
Font.Style = MkSet(fsBold,fsItalic);
A MkSet(fsBold,fsItalic) aqui denota apenas dois elementos de conjunto: fsBold e fsItalic.
Função MkSetRange
A função MkSetRange é um construtor de conjuntos com um intervalo de argumentos. Por exemplo:
LayerSet := MkSetRange(eTopLayer,eBottomLayer);
A função MkSetRange(eTopLayer,eBottomLayer) denota um intervalo de camadas de eTopLayer até eBottomLayer.
Função InSet
Esta função InSet é utilizada como substituição do operador In do Delphi. A in B é igual a InSet(A, B).
If InSet(A,B) then
ShowMessage('A is in B set')
Else
ShowMessage('A not in B set');
Função SetUnion
A função SetUnion é utilizada como substituição do operador + do Delphi. A + B é igual a SetUnion(A, B).
ASet := BSet + CSet;
// should be changed to:
ASet := SetUnion(BSet,CSet);
// in order to achieve the desired script result.
Função SetDifference
A função SetDifference é utilizada como substituição do operador - do Delphi. A - B é igual a SetDifference(A, B).
Função SetIntersection
A função SetIntersection é utilizada como substituição do operador * do Delphi. A * B é igual a SetIntersection(A, B).
Função SubSet
A função SubSet é utilizada como substituição do operador <= de Object Pascal. A <= B é igual a SubSet(A, B).
Utilizar Processadores de Exceções
A palavra-chave Try introduz uma instrução Try-Except ou uma instrução Try-Finally. Estas duas instruções estão relacionadas, mas servem finalidades diferentes:
Try-Finally
Com Try-Finally, as instruções no bloco Finally são sempre executadas independentemente de ocorrer uma exceção no bloco Try, Exit ou Break. Utilize o bloco Try-Finally para libertar objetos temporários e outros recursos e para realizar atividades de limpeza.
Normalmente, apenas é necessária uma instrução Try-Finally numa subrotina.
Example:
Reset(F);
Try
// process file F
Finally
CloseFile(F);
End;
Try-Except
Utilize Try-Except para tratar casos excecionais. Por exemplo, para capturar exceções específicas e fazer algo útil com elas, como registá-las num registo de erros ou criar uma caixa de diálogo amigável. Uma vez que a palavra-chave On não é suportada no DelphiScript, a instrução Raise é utilizada dentro do bloco Except.
Example:
Try
X := Y/Z;
Except
Raise('A divide by zero error!');
End;
Raise
A palavra-chave Raise está relacionada com a palavra-chave Try. A palavra-chave Raise pode ser utilizada sem parâmetros para voltar a lançar a última exceção. Também pode ser utilizada com um parâmetro string para lançar uma exceção com uma mensagem específica.
Example:
Raise(Format('Invalid Value Entered : %d', [Height]));
Note que, uma vez que a palavra-chave On não é suportada, os objetos Exception (disponíveis no Embarcadro Delphi) não podem ser utilizados.