Diferencias entre DelphiScript y Delphi

Diferencias entre DelphiScript y Delphi

En esta sección se describen las diferencias fundamentales entre el lenguaje de scripts DelphiScript y el lenguaje de programación Delphi de Embarcadero, así como su aplicación a la API de Altium Designer.

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

Variables de DelphiScript

Todas las variables de un script son de tipo Variant, y los tipos en la declaración de una 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 los parámetros en la declaración de un procedimiento o una 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, los «variant» se pueden utilizar para almacenar cualquier tipo de datos y realizar numerosas operaciones y conversiones de tipos. Un «variant» se comprueba en cuanto al tipo y se evalúa en tiempo de ejecución. El compilador no emite ninguna advertencia sobre posibles errores en el código, que solo pueden detectarse mediante pruebas exhaustivas. En general, las partes del código que utilizan «variants» pueden considerarse código interpretado, ya que muchas operaciones no pueden resolverse hasta el momento de la ejecución. Esto puede afectar a la velocidad del código.

El resultado de esto es que, una vez que se ha declarado una variable variante y ha obtenido un valor variante, puede copiarse a cualquier tipo de datos, ya sea 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 datos incompatible a una variable, el intérprete de DelphiScript realiza una conversión siempre que sea posible. De lo contrario, se produce un error en tiempo de ejecución. En la práctica, un «variant» almacena información sobre el tipo junto con los datos, por lo que DelphiScript es más lento que el código compilado equivalente de Embarcadero Delphi.

Conjuntos en los scripts

DelphiScript no dispone de tipos de conjunto ni admite operadores de conjunto, a diferencia del lenguaje Delphi, que sí cuenta con tipos de conjunto y admite operadores de conjunto.

Para utilizar conjuntos en scripts de DelphiScript, utilice las funciones integradas que manipulan conjuntos en un script.

Consulte la entrada «Uso de conjuntos en DelphiScript » para obtener más información

Funciones o procedimientos internos

A la hora de plantearse el uso de funciones y procedimientos inside una función o un procedimiento, se recomienda escribir funciones o procedimientos independientes, aunque se permiten las funciones y procedimientos recursivos.

No se recomienda el siguiente fragmento de código de función:

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

Estructura recomendada para las funciones:

Function B
Begin
// blah
End;

Function A
Begin
B;
End;

Palabra clave «Result»

Utiliza la 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

Se admiten rutinas anidadas, pero las variables de la función de nivel superior no se pueden utilizar desde la rutina anidada.

Elementos de la matriz

Se ignora el tipo de los elementos de la matriz y se puede omitir, por lo que estas dos declaraciones son equivalentes:

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

Var
x : array [1..2];

Ten en cuenta que no se pueden declarar tipos de matriz, pero sí se pueden declarar matrices para 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 matriz abierta

La Open Array declaración no es compatible.

Palabra clave «Case»

La Case palabra clave se puede utilizar 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 clases

No se pueden definir nuevas clases en DelphiScript, pero sí se pueden utilizar clases existentes de DelphiScript y crear instancias de ellas. Por ejemplo, la TList y TStringList se pueden crear y utilizar en tus scripts.
See also
TList
TStringList

Función CreateObject

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

Así que, en lugar de:

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

...puedes escribir:

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

See also
FunciónCreateObject.

Generar excepciones

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

Example:

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

See also
Palabras clave Try, Finally y Raise.

ThreadVar

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

Operadores «Set»

El operador «Set» In no es compatible. El InSet se puede utilizar para comprobar si un valor forma parte de un conjunto. Por ejemplo:

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

Ten en cuenta que los operadores de conjunto de Delphi +, -, *, =, >= no funcionan correctamente. En su lugar, se utilizan 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 de conjuntos no son compatibles; utilice la MkSet función para crear un conjunto:

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

See also
Palabra clave MkSet
Palabra clave MkSetRange
Palabra clave InSet
Palabra clave SetDifference
Palabra clave SetIntersection
Palabra clave SetUnion
Palabra clave SubSet
Palabra clave InSet

Operadores

La ^ y @ no son compatibles.

Directivas

Las siguientes directivas no son compatibles (tenga en cuenta que algunas están 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, ten en cuenta que la in directiva de la cláusula Uses cláusula se ignora.

Palabras clave ignoradas

La interface, implementation, program y unit se ignoran en DelphiScript. Los scripts pueden contenerlas, pero no tienen ningún efecto; no obstante, estas palabras clave pueden mejorar la legibilidad de los scripts.

Palabras clave no admitidas

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 windows.pas archivo) no son compatibles (por ejemplo, la RGB función no es compatible).

Uso de la API de Altium Designer en scripts

No es posible crear tus propios tipos de registros o clases utilizando DelphiScript e instanciarlos en un script; sin embargo, sí puedes utilizar determinadas clases de la API de Altium Designer. Por ejemplo, la TStringList y TList clases pueden instanciarse y utilizarse como contenedores de almacenamiento de datos (normalmente del mismo tipo) para satisfacer las necesidades de un script.

Las interfaces de objetos de la API que representan objetos de Altium Designer están disponibles para su uso en scripts. Por ejemplo, es posible actualizar objetos de diseño en documentos de esquemas y PCB mediante el uso de las interfaces de objetos de esquema y de las interfaces de objetos de PCB.

Por convención, a los nombres de las interfaces se les añade una «I» al principio. Por ejemplo, IPCB_Board representa una interfaz para un documento de PCB existente.

Ejemplo de interfaces de 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 se pueden utilizar en scripts:

  • Ciertas funciones y clases de Embarcadero Delphi™, así como extensiones de DelphiScript
  • API de cliente
  • API del servidor PCB
  • API del servidor de esquemas
  • API del servidor de Workspace Manager
  • API de la biblioteca integrada
  • Funciones de la API de Altium Designer
  • Procesos paramétricos

Más información

Consulta los scripts de la colección de scripts descargables para ver las interfaces y funciones de objetos de Altium Designer, así como los objetos y funciones de Delphi que se utilizan en los scripts.

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

Consulta la guía «Uso de la API de Altium Designer » para obtener detalles sobre cómo utilizar los objetos de diseño y sus interfaces en tus scripts.

Consulta la «Referencia de la API de Altium Designer » 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 para usted dependen de qué solución de Altium tenga: Altium Develop, Altium Agile Teams, Altium Agile Enterprise o Altium Designer (con suscripción activa).

Si no ve una función documentada en su software actual, 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