Differenze tra DelphiScript e Delphi
Differenze tra DelphiScript e Delphi
Questa sezione illustra le differenze fondamentali tra il linguaggio di scripting DelphiScript e il linguaggio di programmazione Delphi di Embarcadero, e come ciò si applica all'API di Altium Designer.
Il sistema di scripting di Altium Designer utilizza il linguaggio DelphiScript non tipizzato, pertanto negli script non sono presenti tipi di dati. Sebbene sia possibile dichiarare variabili e i relativi tipi, nonché specificare i tipi per funzioni/procedure o parametri di metodo a scopo di leggibilità, DelphiScript convertirà le variabili non dichiarate durante l’esecuzione dello script. Pertanto, ad esempio, non è possibile definire record o classi.
Variabili di DelphiScript
Tutte le variabili in uno script sono di tipo Variant; i tipi specificati nella dichiarazione di una variabile vengono ignorati e possono essere omessi. Pertanto, queste tre dichiarazioni sono corrette:
Var a : Integer; Var b : Integer; Var c, d;
Anche i tipi dei parametri in una dichiarazione di procedura/funzione vengono ignorati e possono essere omessi. Ad esempio, questo codice è corretto:
Function Sum(a, b) : Integer; Begin Result := a + b; End;
In generale, i Variant possono essere utilizzati per memorizzare qualsiasi tipo di dati ed eseguire numerose operazioni e conversioni di tipo. Un Variant viene sottoposto a controllo di tipo e calcolato in fase di esecuzione. Il compilatore non fornirà alcun avviso relativo a possibili errori nel codice, che possono essere individuati solo tramite test approfonditi. Nel complesso, le porzioni di codice che utilizzano i Variant possono essere considerate codice interpretato, poiché molte operazioni non possono essere risolte fino al momento dell’esecuzione. Ciò può influire sulla velocità del codice.
Di conseguenza, una volta che una variabile variante è stata dichiarata e ha ottenuto un valore variante, può essere copiata in qualsiasi tipo di dati, sia compatibile che incompatibile:
Var V; Begin // variable V can be assigned values of several different types: V := 10; V := 'Hello, World'; V := 45.55; End;
Se a una variabile è stato assegnato un tipo di dati incompatibile, l’interprete DelphiScript esegue una conversione, ove possibile. In caso contrario, viene generato un errore di esecuzione. In pratica, un variant memorizza le informazioni sul tipo insieme ai dati, pertanto DelphiScript risulta più lento rispetto al codice compilato equivalente di Embarcadero Delphi.
Insiemi negli script
DelphiScript non dispone di tipi Set e non supporta gli operatori Set, a differenza del linguaggio Delphi che, invece, dispone di tipi Set e supporta gli operatori Set.
Per utilizzare gli insiemi negli script DelphiScript, utilizzare le funzioni integrate che gestiscono gli insiemi all’interno di uno script.
Per ulteriori informazioni, consultare la voce " Utilizzo degli insiemi in DelphiScript "
Funzioni o procedure interne
Quando si valuta l’utilizzo di funzioni e procedure
Il seguente frammento di codice relativo a una funzione non è consigliato:
Function A Function B Begin // blah End; Begin B; End;
Struttura consigliata per le funzioni:
Function B Begin // blah End; Function A Begin B; End;
Parola chiave Result
Utilizzare la Result
Function Foo : String; Begin Result := 'Foo Foo'; End;
Routine annidate
Le routine annidate sono supportate, ma le variabili della funzione di livello superiore non possono essere utilizzate dalla routine annidata.
Elementi dell'array
Il tipo degli elementi dell'array viene ignorato e può essere omesso, quindi queste due dichiarazioni sono equivalenti:
Var x : array [1..2] of double; Var x : array [1..2];
Si noti che non è possibile dichiarare tipi di array, ma è possibile dichiarare array come variabili.
Type TVertices = Array [1..50] Of TLocation; Var NewVertices : TVertices;
Var NewVertices : Array [1..50] of TLocation;
Dichiarazione di array aperto
La Open Array
Parola chiave "Case"
La Case
Case UserName of 'Alex', 'John' : IsAdministrator := true; 'Peter' : IsAdministrator := false; Else Raise('Unknown user'); End;
Dichiarazioni di classe
Non è possibile definire nuove classi in DelphiScript, ma è possibile utilizzare classi DelphiScript esistenti e istanziarle. Ad esempio, la TListTStringList
TList
TStringList
Funzione CreateObject
La CreateObject
Quindi, invece di:
Procedure Proc; Var l; Begin l := TList.Create; Try // do something with l Finally L.Free; End;
...è possibile scrivere:
Procedure Proc; Var l; Begin l := CreateObject(TList); // Do something with l End;
funzioneCreateObject.
Generare eccezioni
La RaiseOn
Raise(Format('Invalid value : %d', [Height]));
Parole chiave Try, Finally e Raise.
ThreadVar
In DelphiScript, la ThreadvarVarThreadvar
Operatori Set
L'operatore Set InInSet
If InSet(fsBold, Font.Style) then ShowMessage('Bold');
Si noti che gli operatori di insieme di Delphi +, -, *, =, >=MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet
ASet := BSet + CSet; \\ should be changed to ASet := SetUnion(BSet, CSet);
I [...]MkSet
Font.Style := MkSet(fsBold, fsItalic);
Parola chiave MkSet
Parola chiave MkSetRange
Parola chiave InSet
Parola chiave SetDifference
Parola chiave SetIntersection
Parola chiave SetUnion
Parola chiave SubSet
Parola chiave InSet
Operatori
La ^@
Direttive
Le seguenti direttive non sono supportate (si noti che alcune sono obsolete e non sono supportate nemmeno da 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.
Si noti inoltre che la inUses
Parole chiave ignorate
La interfaceimplementationprogramunit
Parole chiave non supportate
Le seguenti parole chiave non sono supportate in DelphiScript:
-
as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.
Le seguenti funzioni RTL di Delphi non sono supportate in DelphiScript:
-
Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.
Le funzioni dell'unità Windows di Delphi (il windows.pasRGB
Utilizzo dell’API di Altium Designer negli script
Non è possibile creare tipi di record o classi personalizzati utilizzando DelphiScript e istanziarli in uno script; tuttavia, è possibile utilizzare alcune classi dell’API di Altium Designer. Ad esempio, la TStringListTList
Le interfacce oggetto dell’API che rappresentano gli oggetti di Altium Designer sono disponibili per l’uso negli script. Ad esempio, è possibile aggiornare gli oggetti di progetto nei documenti Schematico e PCB tramite l’uso delle interfacce oggetto Schematico e delle interfacce oggetto PCB.
Per convenzione, ai nomi delle interfacce viene aggiunta la lettera «I» all’inizio. Ad esempio IPCB_Board
Esempio di interfacce PCB in uno 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;
Le seguenti API possono essere utilizzate negli script:
- Alcune funzioni e classi di Embarcadero Delphi™, nonché le estensioni DelphiScript
- API client
- API del server PCB
- API del server Schematic
- API del server Workspace Manager
- API della libreria integrata
- Funzioni dell'API di Altium Designer
- Processi parametrici
Ulteriori informazioni
Controlla gli script nella raccolta di script scaricabile per vedere le interfacce e le funzioni degli oggetti di Altium Designer, oltre agli oggetti e alle funzioni Delphi utilizzati negli script.
Per informazioni sulla scrittura di script per Altium Designer, consultare la documentazione principale sullo scripting.
Consultare la guida "Utilizzo dell'API di Altium Designer " per i dettagli su come utilizzare gli oggetti di progettazione e le relative interfacce negli script.
Consultare il " Riferimento API di Altium Designer " per informazioni sulla gamma di API di Altium Designer e sui relativi oggetti di interfaccia per gli script.