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 inside funkcji lub procedury, zaleca się pisanie funkcji/procedur samodzielnych — choć dozwolone są procedury/funkcje rekurencyjne.

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 słowa kluczowego, aby ustawić wartość zwracaną w bloku funkcji. Na przykład:

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.

Illegal example:

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

Legal example:

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

Deklaracja tablicy otwartej

Deklaracja Open Array deklaracja nie jest obsługiwana.

Słowo kluczowe „Case”

Słowo Case słowo kluczowe może być używane dla dowolnego typu. Zatem poniższe jest poprawne:

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 TList i TStringList można tworzyć i wykorzystywać w skryptach.
See also
TList
TStringList

Funkcja CreateObject

Funkcja CreateObject funkcja może służyć do tworzenia obiektów, które zostaną niejawnie zwolnione, gdy przestaną być używane.

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;

See also
funkcjaCreateObject.

Generowanie wyjątków

Słowo kluczowe Raise można używać bez parametrów, aby ponownie zgłosić ostatni wyjątek. Słowo kluczowe Raise można również używać z parametrem typu string, aby zgłosić wyjątek z podanym ciągiem komunikatu. Obiekty typu Exception nie są obsługiwane w DelphiScript, ponieważ On słowo kluczowe nie jest obsługiwane.

Example:

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

See also
Słowa kluczowe Try, Finally i Raise.

ThreadVar

W DelphiScript słowo Threadvar słowo kluczowe jest traktowane jako Var. Należy pamiętać, że w programie Embarcadero Delphi zmienne zadeklarowane przy użyciu słowa kluczowego Threadvar mają odrębne wartości w każdym wątku.

Operatory set

Operator Set In nie jest obsługiwany. Operator InSet można go użyć do sprawdzenia, czy dana wartość należy do zbioru. Na przykład:

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

Należy pamiętać, że operatory zbiorów w Delphi +, -, *, =, >= nie działają poprawnie. Zamiast nich stosuje się wbudowane funkcje Delphiscript MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet :

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

Konstruktory [...] konstruktorów zbiorów nie są obsługiwane — należy użyć MkSet funkcji do utworzenia zbioru:

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

See also
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 ^ i @ nie są obsługiwane.

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 in w klauzuli Uses jest ignorowana.

Ignorowane słowa kluczowe

Słowo kluczowe interface, implementation, program oraz unit są ignorowane w DelphiScript. Skrypty mogą je zawierać, ale nie mają one żadnego wpływu — jednak te słowa kluczowe mogą poprawić czytelność skryptów.

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.pas ) nie są obsługiwane (na przykład funkcja RGB funkcja nie jest obsługiwana).

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 TStringList i TList można instancjonować i wykorzystywać jako kontenery do przechowywania danych (zazwyczaj tego samego typu) w celu zaspokojenia potrzeb skryptu.

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 oznacza interfejs dla istniejącego dokumentu PCB.

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 ”.

AI-LocalizedTłumaczenie SI
Jeśli znajdziesz błąd, zaznacz tekst/obraz i naciśnij Ctrl + Enter aby wysłać nam wiadomość.
Dostępność funkcji

Dostępne funkcje zależą od tego, z którego rozwiązania Altium korzystasz – Altium Develop, Altium Agile Teams, Altium Agile Enterprise lub Altium Designer (w ramach aktywnej subskrypcji terminowej).

Jeśli opisana funkcja nie jest widoczna w Twoim oprogramowaniu, skontaktuj się z działem sprzedaży Altium, aby dowiedzieć się więcej.

Starsza dokumentacja

Dokumentacja Altium Designer nie jest już wersjonowana. Jeśli potrzebujesz dostępu do dokumentacji dla starszych wersji Altium Designer, odwiedź sekcję Starsza dokumentacja na stronie Inne instalatory.

Content