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 inside una funzione o una procedura, l’approccio consigliato è quello di scrivere funzioni/procedure autonome, sebbene siano consentite anche procedure/funzioni ricorsive.

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 per impostare il valore di ritorno all’interno di un blocco di 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 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.

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 Open Array dichiarazione non è supportata.

Parola chiave "Case"

La Case parola chiave può essere utilizzata per qualsiasi tipo. Pertanto, quanto segue è valido:

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 TList e TStringList possono essere create e utilizzate nei propri script.
See also
TList
TStringList

Funzione CreateObject

La CreateObject funzione può essere utilizzata 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;

...è possibile scrivere:

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

See also
funzioneCreateObject.

Generare eccezioni

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

Example:

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

See also
Parole chiave Try, Finally e Raise.

ThreadVar

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

Operatori Set

L'operatore Set In non è supportato. L' InSet operatore può essere utilizzato per verificare se un valore appartiene a un insieme. Ad esempio:

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

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

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

I [...] costruttori di insiemi non sono supportati: utilizzare la MkSet funzione per creare un Set:

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

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

Parole chiave ignorate

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

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 TStringList e TList possono essere istanziate e utilizzate 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 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 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 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.

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

Le funzionalità a tua disposizione dipendono dalla soluzione Altium di cui disponi: Altium Develop, Altium Agile Teams, Altium Agile Enterprise oppure Altium Designer (con abbonamento attivo).

Se non vedi una funzionalità documentata nel software che stai effettivamente utilizzando, contatta il reparto 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