Różnice między DelphiScript a Delphi
Różnice między DelphiScript a Delphi
W tej sekcji omówiono zasadnicze różnice między językiem skryptowym DelphiScript a językiem programowania Delphi firmy Embarcadero oraz ich zastosowanie w interfejsie API programu Altium Designer.
System skryptowy programu Altium Designer wykorzystuje język DelphiScript bez typów, więc w skryptach nie ma typów danych. Chociaż można deklarować zmienne i ich typy oraz określać typy funkcji/procedur lub parametrów metod w celu zwiększenia czytelności, DelphiScript konwertuje niezadeklarowane zmienne podczas wykonywania skryptu. Nie można więc na przykład definiować rekordów ani klas.
Zmienne w DelphiScript
Wszystkie zmienne w skrypcie są typu Variant, a typy w deklaracji zmiennej są ignorowane i można je pominąć. Zatem te trzy deklaracje są poprawne:
Var a : Integer; Var b : Integer; Var c, d;
Typy parametrów w deklaracji procedury/funkcji są również ignorowane i można je pominąć. Na przykład ten kod jest poprawny:
Function Sum(a, b) : Integer; Begin Result := a + b; End;
Ogólnie rzecz biorąc, zmienne typu Variant mogą służyć do przechowywania dowolnego typu danych oraz wykonywania licznych operacji i konwersji typów. Typ Variant jest sprawdzany i obliczany w czasie wykonywania. Kompilator nie wyświetla ostrzeżeń o możliwych błędach w kodzie, które można wykryć jedynie poprzez szeroko zakrojone testy. Ogólnie rzecz biorąc, fragmenty kodu wykorzystujące typ Variant można uznać za kod interpretowany, ponieważ wiele operacji nie może zostać rozstrzygniętych przed czasem wykonywania. Może to wpływać na szybkość działania kodu.
W rezultacie, gdy zmienna typu variant została zadeklarowana i uzyskała wartość typu variant, można ją skopiować do dowolnego kompatybilnego lub niekompatybilnego typu danych:
Var V; Begin // variable V can be assigned values of several different types: V := 10; V := 'Hello, World'; V := 45.55; End;
Jeśli do zmiennej przypisano niekompatybilny typ danych, interpreter DelphiScript dokonuje konwersji, o ile jest to możliwe. W przeciwnym razie generowany jest błąd wykonania. W praktyce wariant przechowuje informacje o typie wraz z danymi, dlatego DelphiScript działa wolniej niż równoważny kod skompilowany w Embarcadero Delphi.
Zbiory w skryptach
DelphiScript nie posiada typów zestawów i nie obsługuje operatorów zestawów, w przeciwieństwie do języka Delphi, który posiada typy zestawów i obsługuje operatory zestawów.
Aby korzystać z zbiorów w skryptach DelphiScript, należy używać wbudowanych funkcji obsługujących zbiory w skrypcie.
Więcej informacji można znaleźć w artykule „Korzystanie z zbiorów w DelphiScript”
Funkcje lub procedury wewnętrzne
Rozważając użycie funkcji i procedur
Poniższy fragment kodu funkcji nie jest zalecany:
Function A Function B Begin // blah End; Begin B; End;
Zalecana struktura funkcji:
Function B Begin // blah End; Function A Begin B; End;
Słowo kluczowe „Result”
Należy użyć Result
Function Foo : String; Begin Result := 'Foo Foo'; End;
Procedury zagnieżdżone
Obsługiwane są procedury zagnieżdżone, ale zmienne funkcji najwyższego poziomu nie mogą być używane w procedurze zagnieżdżonej.
Elementy tablicy
Typ elementów tablicy jest ignorowany i można go pominąć, więc te dwie deklaracje są równoważne:
Var x : array [1..2] of double; Var x : array [1..2];
Należy pamiętać, że nie można deklarować typów tablic, ale można deklarować tablice jako zmienne.
Type TVertices = Array [1..50] Of TLocation; Var NewVertices : TVertices;
Var NewVertices : Array [1..50] of TLocation;
Deklaracja tablicy otwartej
Deklaracja Open Array
Słowo kluczowe „Case”
Słowo Case
Case UserName of 'Alex', 'John' : IsAdministrator := true; 'Peter' : IsAdministrator := false; Else Raise('Unknown user'); End;
Deklaracje klas
W DelphiScript nie można definiować nowych klas, ale można korzystać z istniejących klas DelphiScript i tworzyć ich instancje. Na przykład TListTStringList
TList
TStringList
Funkcja CreateObject
Funkcja CreateObject
Zamiast:
Procedure Proc; Var l; Begin l := TList.Create; Try // do something with l Finally L.Free; End;
...można napisać:
Procedure Proc; Var l; Begin l := CreateObject(TList); // Do something with l End;
funkcjaCreateObject.
Generowanie wyjątków
Słowo kluczowe RaiseOn
Raise(Format('Invalid value : %d', [Height]));
Słowa kluczowe Try, Finally i Raise.
ThreadVar
W DelphiScript słowo ThreadvarVarThreadvar
Operatory set
Operator Set InInSet
If InSet(fsBold, Font.Style) then ShowMessage('Bold');
Należy pamiętać, że operatory zbiorów w Delphi +, -, *, =, >=MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet
ASet := BSet + CSet; \\ should be changed to ASet := SetUnion(BSet, CSet);
Konstruktory [...]MkSet
Font.Style := MkSet(fsBold, fsItalic);
Słowo kluczowe MkSet
Słowo kluczowe MkSetRange
Słowo kluczowe InSet
Słowo kluczowe SetDifference
Słowo kluczowe SetIntersection
Słowo kluczowe SetUnion
Słowo kluczowe SubSet
Słowo kluczowe InSet
Operatory
Słowo ^@
Dyrektywy
Następujące dyrektywy nie są obsługiwane (należy pamiętać, że niektóre z nich są przestarzałe i nie są również obsługiwane przez 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.
Należy również pamiętać, że inUses
Ignorowane słowa kluczowe
Słowo kluczowe interfaceimplementationprogramunit
Słowa kluczowe nieobsługiwane
W DelphiScript nie są obsługiwane następujące słowa kluczowe:
-
as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.
Następujące funkcje biblioteki RTL języka Delphi nie są obsługiwane w DelphiScript:
-
Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.
Funkcje z jednostki Windows języka Delphi (plik windows.pasRGB
Korzystanie z interfejsu API programu Altium Designer w skryptach
Nie można tworzyć własnych rekordów ani typów klas za pomocą DelphiScript i instancjonować ich w skrypcie, jednak można korzystać z niektórych klas z interfejsu API programu Altium Designer. Na przykład TStringListTList
Interfejsy obiektów API reprezentujące obiekty programu Altium Designer są dostępne do wykorzystania w skryptach. Na przykład istnieje możliwość aktualizowania obiektów projektu w dokumentach schematów i płytek drukowanych poprzez wykorzystanie interfejsów obiektów schematów oraz interfejsów obiektów płytek drukowanych.
Zgodnie z konwencją przed nazwami interfejsów dodaje się literę „I”. Na przykład IPCB_Board
Przykład interfejsów PCB w skrypcie:
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;
W skryptach można używać następujących interfejsów API:
- Niektóre funkcje i klasy Embarcadero Delphi™ oraz rozszerzenia DelphiScript
- Interfejs API klienta
- Interfejs API serwera PCB
- Interfejs API serwera schematów
- Interfejs API serwera Workspace Manager
- Zintegrowane API biblioteki
- Funkcje API programu Altium Designer
- Procesy parametryczne
Więcej informacji
Zapoznaj się ze skryptami w kolekcji skryptów do pobrania, aby zapoznać się z interfejsami obiektów i funkcjami programu Altium Designer, a także z obiektami i funkcjami języka Delphi wykorzystywanymi w skryptach.
Informacje na temat pisania skryptów dla programu Altium Designer można znaleźć w głównej dokumentacji dotyczącej skryptów.
Szczegółowe informacje na temat korzystania z obiektów projektowych i ich interfejsów w skryptach znajdziesz w przewodniku „Korzystanie z API programu Altium Designer ”.
Informacje na temat zakresu interfejsów API programu Altium Designer oraz obiektów interfejsów przeznaczonych do skryptów można znaleźć w dokumentacji „Altium Designer API Reference ”.