Differenze tra DelphiScript e Delphi

Differenze tra DelphiScript e Delphi

Questa sezione illustra le differenze essenziali 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, quindi negli script non esistono tipi di dati. Sebbene sia possibile dichiarare variabili e i relativi tipi, e specificare i tipi per funzioni/procedure o parametri di metodo per migliorarne la leggibilità, DelphiScript convertirà le variabili non dichiarate durante l'esecuzione di uno script. Quindi, ad esempio, non è possibile definire record o classi.

Variabili Delphi Script

Tutte le variabili in uno script sono di tipo Variant e i tipi in una dichiarazione di variabile vengono ignorati e possono essere omessi. Quindi 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 usati per memorizzare qualsiasi tipo di dato ed eseguire numerose operazioni e conversioni di tipo. Un variant viene controllato per tipo e valutato in fase di esecuzione. Il compilatore non fornirà avvisi su possibili errori nel codice, che possono essere individuati solo con test approfonditi. Nel complesso, le porzioni di codice che usano variant possono essere considerate codice interpretato, perché molte operazioni non possono essere risolte fino al run-time. Questo può influire sulla velocità del codice.

Il risultato è che, una volta dichiarata una variabile variant e assegnatole un valore variant, essa può essere copiata in qualsiasi tipo di dato compatibile o 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 viene assegnato un tipo di dato incompatibile, l'interprete DelphiScript esegue una conversione ove possibile. In caso contrario, viene generato un errore di run-time. In pratica, un variant memorizza le informazioni di tipo insieme ai dati, quindi DelphiScript è più lento del codice compilato equivalente in Embarcadero Delphi.

Set 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 usare i Set negli script DelphiScript, utilizzare le funzioni integrate che manipolano i set in uno script.

Per ulteriori informazioni, vedere la voce Uso dei Set in DelphiScript

Funzioni o procedure interne

Quando si valuta l'uso di funzioni e procedure inside una funzione o procedura, l'approccio consigliato è scrivere funzioni/procedure standalone, sebbene siano consentite procedure/funzioni ricorsive.

Il seguente frammento di funzione non è consigliato:

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

Struttura di funzione consigliata:

Function B
Begin
// blah
End;

Function A
Begin
B;
End;

Parola chiave Result

Usare la parola chiave Result per impostare il valore di ritorno all'interno di un blocco funzione. Ad esempio:

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 usate da quella 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.

Illegal example:

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

Legal example:

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

Dichiarazione di array aperto

La dichiarazione Open Array non è supportata.

Parola chiave Case

La parola chiave Case può essere usata per qualsiasi tipo. Quindi quanto segue è valido:


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

Dichiarazioni di classe

In DelphiScript non è possibile definire nuove classi, ma è possibile usare classi DelphiScript esistenti e istanziarle. Ad esempio, le classi TList e TStringList possono essere create e usate nei propri script.
See also
TList
TStringList

Funzione CreateObject

La funzione CreateObject può essere usata per creare oggetti che verranno liberati implicitamente quando non saranno più utilizzati.

Quindi invece di:

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

...si può scrivere:

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

See also
funzione CreateObject.

Generare eccezioni

La parola chiave Raise può essere usata senza parametri per rilanciare l'ultima eccezione. Raise può anche essere usato con un parametro stringa per generare l'eccezione con la stringa di messaggio specificata. Gli oggetti Exception non sono supportati in DelphiScript, perché la parola chiave On non è supportata.

Example:

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

See also
Parole chiave Try, Finally e Raise.

ThreadVar

In Delphiscript, la parola chiave Threadvar viene trattata come Var. Si noti che in Embarcadero Delphi, le variabili dichiarate usando la parola chiave Threadvar hanno valori distinti in ciascun thread.

Operatori Set

L'operatore Set In non è supportato. L'operatore InSet può essere usato per verificare se un valore è membro di un set. Ad esempio:

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

Si noti che gli operatori Set di Delphi +, -, *, <=, >= non funzionano correttamente. Al loro posto vengono usate le funzioni integrate di Delphiscript MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet:

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

I costruttori di set [...] non sono supportati: usare la funzione MkSet per creare 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

Operatori

Gli operatori ^ e @ non sono supportati.

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 direttiva in nella clausola Uses viene ignorata.

Parole chiave ignorate

Le parole chiave interface, implementation, program e unit vengono ignorate in DelphiScript. Gli script possono contenerle ma non hanno alcun effetto; tuttavia, queste parole chiave possono migliorare la leggibilità degli script.

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 file windows.pas) non sono supportate (ad esempio, la funzione RGB non è supportata).

Uso dell'API di Altium Designer negli script

Non è possibile creare i propri tipi record o classe usando DelphiScript e istanziarli in uno script; tuttavia, è possibile usare alcune classi dell'API di Altium Designer. Ad esempio, le classi TStringList e TList possono essere istanziate e usate come contenitori per l'archiviazione dei dati (di solito dello stesso tipo) per soddisfare le esigenze di uno script.

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 Schematic e PCB tramite l'uso delle interfacce oggetto Schematic e delle interfacce oggetto PCB.

Per convenzione, ai nomi delle interfacce viene aggiunta una "I" all'inizio del nome. Ad esempio, IPCB_Board rappresenta un'interfaccia per un documento PCB esistente.

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 usate negli script:

  • Alcune funzioni e classi Embarcadero Delphi™, ed estensioni DelphiScript
  • Client API
  • PCB Server API
  • Schematic Server API
  • Workspace Manager Server API
  • Integrated Library API
  • Funzioni API di Altium Designer
  • Processi parametrici

Ulteriori informazioni

Controllare gli script nella raccolta di script scaricabile per vedere le interfacce oggetto e le funzioni di Altium Designer, oltre agli oggetti e alle funzioni Delphi usati negli script.

Fare riferimento alla documentazione principale Scripting per informazioni sulla scrittura di script per Altium Designer.

Fare riferimento alla guida Uso dell'API di Altium Designer per dettagli su come usare gli oggetti di progetto e le relative interfacce nei propri script.

Fare riferimento a Altium Designer API Reference per informazioni sulla gamma di API di Altium Designer e sui relativi oggetti interfaccia per gli script.

AI-LocalizedLocalizzato tramite A
Se trovi un problema, seleziona il testo/l’immagine e premi Ctrl + Invio per inviarci il tuo feedback.
Disponibilità delle funzionalità

Le funzionalità disponibili dipendono dalla soluzione Altium in uso – Altium Develop, un’edizione di Altium Agile (Agile Teams o Agile Enterprise), oppure Altium Designer (con licenza attiva).

Se non vedi nel tuo software una funzionalità descritta,  contatta il team vendite di Altium per saperne di più.

Documentazione legacy

La documentazione di Altium Designer non è più suddivisa per versione. Se è necessario accedere alla documentazione delle versioni precedenti di Altium Designer, visitare la sezione Documentazione legacy della pagina Altri programmi di installazione.

Contenuto