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