Diferenças entre o DelphiScript e o Delphi

Diferenças entre o DelphiScript e o Delphi

Esta secção aborda as diferenças essenciais entre a linguagem de script DelphiScript e a linguagem de programação Delphi da Embarcadero, e como isso se aplica à API do Altium Designer.

O sistema de scripts do Altium Designer utiliza a linguagem DelphiScript sem tipos, pelo que não existem tipos de dados nos scripts. Embora seja possível declarar variáveis e os seus tipos, bem como especificar os tipos para funções/procedimentos ou parâmetros de métodos para facilitar a legibilidade, o DelphiScript converterá as variáveis não declaradas quando um script estiver a ser executado. Assim, por exemplo, não é possível definir registos ou classes.

Variáveis do DelphiScript

Todas as variáveis num script são do tipo Variant, e os tipos na declaração de uma variável são ignorados e podem ser omitidos. Assim, estas três declarações estão corretas:

Var
a : Integer;
 
Var
b : Integer;
 
Var
  c, d;

Os tipos dos parâmetros numa declaração de procedimento/função também são ignorados e podem ser omitidos. Por exemplo, este código está correto:

Function Sum(a, b) : Integer;
Begin
  Result := a + b;
End;

Em geral, os Variant podem ser utilizados para armazenar qualquer tipo de dados e realizar inúmeras operações e conversões de tipos. Um Variant é verificado quanto ao tipo e calculado em tempo de execução. O compilador não emite um aviso sobre possíveis erros no código, que só podem ser detetados através de testes exaustivos. Em geral, as partes do código que utilizam Variants podem ser consideradas código interpretado, uma vez que muitas operações só podem ser resolvidas em tempo de execução. Isto pode afetar a velocidade do código.

O resultado disto é que, uma vez que uma variável variante tenha sido declarada e tenha obtido um valor variante, pode ser copiada para qualquer tipo de dados compatível ou incompatível:

Var
V;
Begin
  // variable V can be assigned values of several different types:
  V := 10;
  V := 'Hello, World';
  V := 45.55;
End;

Se for atribuído um tipo de dados incompatível a uma variável, o interpretador do DelphiScript efetua uma conversão sempre que possível. Caso contrário, é emitido um erro em tempo de execução. Na prática, uma variante armazena informações de tipo juntamente com os dados, pelo que o DelphiScript é mais lento do que o código compilado equivalente do Embarcadero Delphi.

Conjuntos em scripts

O DelphiScript não possui tipos de conjunto nem suporta operadores de conjunto, ao contrário da linguagem Delphi, que possui tipos de conjunto e suporta operadores de conjunto.

Para utilizar conjuntos em scripts do DelphiScript, utilize as funções integradas que manipulam conjuntos num script.

Consulte a entrada «Utilizar conjuntos no DelphiScript» para obter mais informações

Funções ou procedimentos internos

Ao considerar a utilização de funções e procedimentos inside uma função ou procedimento, a abordagem recomendada é escrever funções/procedimentos autónomos — embora sejam permitidos procedimentos/funções recursivos.

O seguinte fragmento de função não é recomendado:

Function A
Function B
Begin
// blah
End;
Begin
B;
End;

Estrutura de função recomendada:

Function B
Begin
// blah
End;

Function A
Begin
B;
End;

Palavra-chave Result

Utilize a Result para definir o valor de retorno dentro de um bloco de função. Por exemplo:

Function Foo : String;
Begin
Result := 'Foo Foo';
End;

Rotinas aninhadas

As rotinas aninhadas são suportadas, mas as variáveis da função de nível superior não podem ser utilizadas a partir da rotina aninhada.

Elementos de matriz

O tipo dos elementos da matriz é ignorado e pode ser omitido, pelo que estas duas declarações são equivalentes:

Var
x : array [1..2] of double;

Var
x : array [1..2];

Note que não é possível declarar tipos de matriz, mas pode-se declarar matrizes para variáveis.

Illegal example:

Type
TVertices = Array [1..50] Of TLocation;
Var
NewVertices : TVertices;

Legal example:

Var
NewVertices : Array [1..50] of TLocation;

Declaração de varriga aberta

A Open Array declaração não é suportada.

Palavra-chave «Case»

A Case palavra-chave pode ser utilizada para qualquer tipo. Assim, o seguinte é válido:

Case UserName of
'Alex', 'John' : IsAdministrator := true;
'Peter' : IsAdministrator := false;
Else
Raise('Unknown user');
End;

Declarações de classes

Não é possível definir novas classes no DelphiScript, mas pode utilizar classes existentes do DelphiScript e instanciá-las. Por exemplo, a TList e TStringList podem ser criadas e utilizadas nos seus scripts.
See also
TList
TStringList

Função CreateObject

A CreateObject função pode ser utilizada para criar objetos que serão libertados implicitamente quando deixarem de ser utilizados.

Assim, em vez de:

Procedure Proc;
Var
  l;
Begin
    l := TList.Create;
  Try
    // do something with l
  Finally
  L.Free;
End;

...pode escrever:

Procedure Proc;
Var
  l;
Begin
  l := CreateObject(TList);
  // Do something with l
End;

See also
FunçãoCreateObject.

Lançar exceções

A Raise palavra-chave pode ser utilizada sem parâmetros para re-lançar a última exceção. A palavra-chave Raise também pode ser utilizada com um parâmetro de cadeia de caracteres para lançar a exceção com a mensagem especificada. Os objetos Exception não são suportados no DelphiScript, porque a On palavra-chave não é suportada.

Example:

Raise(Format('Invalid value : %d', [Height]));

See also
Palavras-chave Try, Finally e Raise.

ThreadVar

No DelphiScript, a Threadvar palavra-chave é tratada como Var. Note que no Embarcadero Delphi, as variáveis declaradas utilizando a Threadvar têm valores distintos em cada thread.

Operadores Set

O operador Set In não é suportado. O InSet pode ser utilizado para verificar se um valor pertence a um conjunto. Por exemplo:

If InSet(fsBold, Font.Style) then
ShowMessage('Bold');

Note-se que os operadores de conjunto do Delphi +, -, *, =, >= não funcionam corretamente. Em vez disso, são utilizadas as funções integradas do Delphiscript MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet são utilizadas em vez disso:

ASet := BSet + CSet; \\ should be changed to
ASet := SetUnion(BSet, CSet);

Os [...] construtores de conjuntos não são suportados — utilize a MkSet função para criar um conjunto:

Font.Style := MkSet(fsBold, fsItalic); 

See also
Palavra-chave MkSet
Palavra-chave MkSetRange
Palavra-chave InSet
Palavra-chave SetDifference
Palavra-chave SetIntersection
Palavra-chave SetUnion
Palavra-chave SubSet
Palavra-chave InSet

Operadores

A ^ e @ não são suportados.

Diretivas

As seguintes diretivas não são suportadas (note-se que algumas estão obsoletas e também não são suportadas pelo Embarcadero Delphi): absolute, abstract, assembler, automated, cdecl, contains, default, dispid, dynamic, export, external, far, implements, index, message, name, near, nodefault, overload, override, package, pascal, private protected, public, published, read, readonly, register, reintroduce, requires, resident, safecall, stdcall, stored, virtual, write, writeonly.

Além disso, note que a in na cláusula Uses cláusula é ignorada.

Palavras-chave ignoradas

A interface, implementation, program e unit são ignoradas no DelphiScript. Os scripts podem contê-las, mas não têm qualquer efeito — no entanto, estas palavras-chave podem melhorar a legibilidade dos scripts.

Palavras-chave não suportadas

As seguintes palavras-chave não são suportadas no DelphiScript:

  • as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.

As seguintes funções RTL do Delphi não são suportadas no DelphiScript:

  • Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.

As funções da unidade Windows do Delphi (o windows.pas ficheiro) não são suportadas (por exemplo, a RGB função não é suportada).

Utilização da API do Altium Designer em scripts

Não é possível criar os seus próprios tipos de registos ou classes utilizando o DelphiScript e instanciá-los num script; no entanto, pode utilizar determinadas classes da API do Altium Designer. Por exemplo, a TStringList e TList podem ser instanciadas e utilizadas como contentores de armazenamento de dados (normalmente do mesmo tipo) para satisfazer as necessidades de um script.

As interfaces de objeto da API que representam objetos do Altium Designer estão disponíveis para utilização em scripts. Por exemplo, é possível atualizar objetos de projeto em documentos de esquemático e PCB através da utilização das interfaces de objetos de esquemático e das interfaces de objetos de PCB.

Por convenção, os nomes das interfaces têm um «I» adicionado à frente do nome. Por exemplo, IPCB_Board representa uma interface para um documento PCB existente.

Exemplo de interfaces PCB num script:

Procedure ViaCreation;
Var
  Board : IPCB_Board;
  Via : IPCB_Via;
Begin
  Board := PCBServer.GetCurrentPCBBoard;
  If Board = Nil Then Exit;
 
  (\* Create a Via object\* )
  Via           := PCBServer.PCBObjectFactory(eViaObject, eNoDimension, eCreate_Default);
  Via.X         := MilsToCoord(7500);
  Via.Y         := MilsToCoord(7500);
  Via.Size      := MilsToCoord(50);
  Via.HoleSize  := MilsToCoord(20);
  Via.LowLayer  := eTopLayer;
  Via.HighLayer := eBottomLayer;
 
  (* Put this via in the Board object*)
  Board.AddPCBObject(Via);
End;

As seguintes APIs podem ser utilizadas em scripts:

  • Certas funções e classes do Embarcadero Delphi™, bem como extensões do DelphiScript
  • API do cliente
  • API do servidor PCB
  • API do servidor de esquemas
  • API do servidor do Gestor de Espaço de Trabalho
  • API da biblioteca integrada
  • Funções da API do Altium Designer
  • Processos paramétricos

Mais informações

Consulte os scripts na coleção de scripts para download para ver as interfaces e funções de objetos do Altium Designer, bem como os objetos e funções do Delphi utilizados nos scripts.

Consulte a documentação principal sobre scripts para obter informações sobre como escrever scripts para o Altium Designer.

Consulte o guia «Utilização da API do Altium Designer » para obter detalhes sobre como utilizar objetos de projeto e as suas interfaces nos seus scripts.

Consulte a «Referência da API do Altium Designer » para obter informações sobre o leque de APIs do Altium Designer e os seus objetos de interface para scripts.

AI-LocalizedLocalizado por IA
Caso encontre um problema, selecione o texto/imagem e primaCtrl + Enterpara nos enviar o seu feedback.
Disponibilidade de Recursos

Os recursos disponíveis para você dependem de qual solução Altium você possui – Altium Develop, Altium Agile Teams, Altium Agile Enterprise ou Altium Designer (com assinatura ativa).

Se você não vir um recurso documentado no software que está usando no momento, entre em contato com a equipe de vendas da Altium para saber mais.

Documentação Legada

A documentação do Altium Designer já não é versionada. Se precisar de aceder à documentação de versões anteriores do Altium Designer, visite a secção Documentação Legada da página de Outros Instaladores.

Conteúdo