Diferencias entre DelphiScript y Delphi

Diferencias entre DelphiScript y Delphi

Esta sección cubre las diferencias esenciales entre el lenguaje de scripting DelphiScript y el lenguaje de programación Delphi de Embarcadero, y cómo esto se aplica a la API de Altium Designer.

El sistema de scripting de Altium Designer utiliza el lenguaje DelphiScript sin tipado, por lo que no hay tipos de datos en los scripts. Aunque puede declarar variables y sus tipos, y especificar los tipos de funciones/procedimientos o parámetros de métodos para mejorar la legibilidad, DelphiScript convertirá las variables no declaradas cuando se ejecute un script. Así, por ejemplo, no puede definir registros ni clases.

Variables de Delphi Script

Todas las variables de un script son de tipo Variant, y los tipos en una declaración de variable se ignoran y pueden omitirse. Por lo tanto, estas tres declaraciones son correctas:

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

Los tipos de parámetros en una declaración de procedimiento/función también se ignoran y pueden omitirse. Por ejemplo, este código es correcto:

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

En general, las variantes pueden usarse para almacenar cualquier tipo de dato y realizar numerosas operaciones y conversiones de tipo. Una variante se comprueba en cuanto a tipo y se calcula en tiempo de ejecución. El compilador no proporcionará una advertencia sobre posibles errores en el código, que solo pueden detectarse con pruebas exhaustivas. En conjunto, las partes del código que usan variantes pueden considerarse código interpretado, porque muchas operaciones no pueden resolverse hasta el tiempo de ejecución. Esto puede afectar la velocidad del código.

El resultado de esto es que, una vez que una variable variant ha sido declarada y ha obtenido un valor variant, puede copiarse a cualquier tipo de dato compatible o incompatible :

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

Si se ha asignado un tipo de dato incompatible a una variable, el intérprete de DelphiScript realiza una conversión cuando es posible. De lo contrario, se genera un error en tiempo de ejecución. En la práctica, una variant almacena información de tipo junto con los datos, por lo que DelphiScript es más lento que el código compilado equivalente de Embarcadero Delphi.

Conjuntos en scripts

DelphiScript no tiene tipos Set ni admite operadores Set, a diferencia del lenguaje Delphi, que sí tiene tipos Set y admite operadores Set.

Para usar Sets en scripts DelphiScript, use las funciones integradas que manipulan conjuntos en un script.

Consulte la entrada Using Sets in DelphiScript para obtener más información

Funciones o procedimientos internos

Al considerar el uso de funciones y procedimientos inside una función o procedimiento, el enfoque recomendado es escribir funciones/procedimientos independientes, aunque se permiten procedimientos/funciones recursivos.

No se recomienda el siguiente fragmento de función:

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

Estructura de función recomendada:

Function B
Begin
// blah
End;

Function A
Begin
B;
End;

Palabra clave Result

Use la palabra clave Result para establecer el valor de retorno dentro de un bloque de función. Por ejemplo:

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

Rutinas anidadas

Las rutinas anidadas son compatibles, pero las variables de la función de nivel superior no pueden usarse desde la rutina anidada.

Elementos de arreglo

El tipo de los elementos del arreglo se ignora y puede omitirse, por lo que estas dos declaraciones son equivalentes:

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

Var
x : array [1..2];

Tenga en cuenta que no puede declarar tipos de arreglo, pero sí puede declarar arreglos en variables.

Illegal example:

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

Legal example:

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

Declaración de arreglo abierto

La declaración Open Array no es compatible.

Palabra clave Case

La palabra clave Case puede usarse para cualquier tipo. Por lo tanto, lo siguiente es válido:


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

Declaraciones de clase

No se pueden definir clases nuevas en DelphiScript, pero puede usar clases existentes de DelphiScript e instanciarlas. Por ejemplo, las clases TList y TStringList pueden crearse y usarse en sus scripts.
See also
TList
TStringList

Función CreateObject

La función CreateObject puede usarse para crear objetos que se liberarán implícitamente cuando ya no se utilicen.

Por lo tanto, en lugar de:

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

...puede escribir:

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

See also
función CreateObject.

Lanzar excepciones

La palabra clave Raise puede usarse sin parámetros para volver a lanzar la última excepción. Raise también puede usarse con un parámetro de cadena para lanzar la excepción con la cadena de mensaje especificada. Los objetos Exception no son compatibles con DelphiScript, porque la palabra clave On no es compatible.

Example:

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

See also
Palabras clave Try, Finally y Raise.

ThreadVar

En Delphiscript, la palabra clave Threadvar se trata como Var. Tenga en cuenta que en Embarcadero Delphi, las variables declaradas usando la palabra clave Threadvar tienen valores distintos en cada hilo.

Operadores Set

El operador Set In no es compatible. El operador InSet puede usarse para comprobar si un valor es miembro de un conjunto. Por ejemplo:

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

Tenga en cuenta que los operadores Set de Delphi +, -, *, <=, >= no funcionan correctamente. En su lugar, se usan las funciones integradas de Delphiscript MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet:

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

Los constructores Set [...] no son compatibles; use la función MkSet para crear un Set:

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

See also
MkSet keyword
MkSetRange keyword
InSet keyword
SetDifference keyword
SetIntersection keyword
SetUnion keyword
SubSet keyword
InSet keyword

Operadores

Los operadores ^ y @ no son compatibles.

Directivas

Las siguientes directivas no son compatibles (tenga en cuenta que algunas son obsoletas y tampoco son compatibles con 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.

Además, tenga en cuenta que la directiva in en la cláusula Uses se ignora.

Palabras clave ignoradas

Las palabras clave interface, implementation, program y unit se ignoran en DelphiScript. Los scripts pueden contenerlas, pero no tienen efecto; sin embargo, estas palabras clave pueden mejorar la legibilidad de los scripts.

Palabras clave no compatibles

Las siguientes palabras clave no son compatibles con DelphiScript:

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

Las siguientes funciones RTL de Delphi no son compatibles con DelphiScript:

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

Las funciones de la unidad Windows de Delphi (el archivo windows.pas) no son compatibles (por ejemplo, la función RGB no es compatible).

Uso de la API de Altium Designer en scripts

No puede crear sus propios tipos de registros o clases con DelphiScript ni instanciarlos en un script; sin embargo, puede usar ciertas clases de la API de Altium Designer. Por ejemplo, las clases TStringList y TList pueden instanciarse y utilizarse como contenedores de almacenamiento de datos (normalmente del mismo tipo) para satisfacer las necesidades de un script.

Las interfaces de objeto de la API que representan objetos de Altium Designer están disponibles para usarse en scripts. Por ejemplo, tiene la capacidad de actualizar objetos de diseño en documentos Schematic y PCB mediante el uso de interfaces de objetos Schematic y de interfaces de objetos PCB.

Por convención, los nombres de interfaz llevan una 'I' delante del nombre. Por ejemplo, IPCB_Board representa una interfaz para un documento PCB existente.

Ejemplo de interfaces PCB en un 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;

Las siguientes API pueden usarse en scripts:

  • Ciertas funciones y clases de Embarcadero Delphi™, y extensiones de DelphiScript
  • API de cliente
  • API de PCB Server
  • API de Schematic Server
  • API de Workspace Manager Server
  • API de biblioteca integrada
  • Funciones de la API de Altium Designer
  • Procesos paramétricos

Más información

Revise los scripts de la colección de scripts descargable para ver interfaces de objetos y funciones de Altium Designer, además de objetos y funciones de Delphi utilizados en scripts.

Consulte la documentación principal de Scripting para obtener información sobre cómo escribir scripts para Altium Designer.

Consulte la guía Using the Altium Designer API para obtener detalles sobre cómo usar objetos de diseño y sus interfaces en sus scripts.

Consulte la Altium Designer API Reference para obtener información sobre la gama de API de Altium Designer y sus objetos de interfaz para scripts.

AI-LocalizedLocalizado por IA
Si encuentra un problema, seleccione el texto/imagen y presioneCtrl + Enterpara enviarnos sus comentarios.
Disponibilidad de funciones

Las funciones disponibles dependen de la solución de Altium que tenga: Altium Develop, una edición de Altium Agile (Agile Teams o Agile Enterprise), o Altium Designer (con suscripción activa).

Si no ve alguna función mencionada en su software, contacte con Ventas de Altium para obtener más información.

Documentación heredada

La documentación de Altium Designer ya no está versionada. Si necesita acceder a la documentación de versiones anteriores de Altium Designer, visite la sección Documentación heredada de la página de Otros instaladores.

Contenido