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
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
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.
Type TVertices = Array [1..50] Of TLocation; Var NewVertices : TVertices;
Var NewVertices : Array [1..50] of TLocation;
Declaración de matriz abierta
La Open Array
Palabra clave «Case»
La Case
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 TListTStringList
TList
TStringList
Función CreateObject
La CreateObject
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;
FunciónCreateObject.
Generar excepciones
La RaiseOn
Raise(Format('Invalid value : %d', [Height]));
Palabras clave Try, Finally y Raise.
ThreadVar
En DelphiScript, la ThreadvarVarThreadvar
Operadores «Set»
El operador «Set» InInSet
If InSet(fsBold, Font.Style) then ShowMessage('Bold');
Ten en cuenta que los operadores de conjunto de Delphi +, -, *, =, >=MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet
ASet := BSet + CSet; \\ should be changed to ASet := SetUnion(BSet, CSet);
Los [...]MkSet
Font.Style := MkSet(fsBold, fsItalic);
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 ^@
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 inUses
Palabras clave ignoradas
La interfaceimplementationprogramunit
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.pasRGB
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 TStringListTList
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
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.