Различия между DelphiScript и Delphi

Различия между DelphiScript и Delphi

В этом разделе рассматриваются основные различия между языком сценариев DelphiScript и языком программирования Delphi от Embarcadero, а также их влияние на API Altium Designer.

Система скриптов Altium Designer использует язык DelphiScript без типизации, поэтому в скриптах отсутствуют типы данных. Хотя для удобства чтения можно объявлять переменные и их типы, а также указывать типы для функций/процедур или параметров методов, DelphiScript преобразует необъявленные переменные при выполнении скрипта. Так, например, нельзя определять записи или классы.

Переменные DelphiScript

Все переменные в скрипте имеют тип Variant, а типы в объявлении переменной игнорируются и могут быть пропущены. Таким образом, следующие три объявления являются правильными:

Var
a : Integer;
 
Var
b : Integer;
 
Var
  c, d;

Типы параметров в объявлении процедуры/функции также игнорируются и могут быть опущены. Например, этот код является корректным:

Function Sum(a, b) : Integer;
Begin
  Result := a + b;
End;

В целом, варианты можно использовать для хранения данных любого типа и выполнения многочисленных операций и преобразований типов. Тип варианта проверяется и вычисляется во время выполнения. Компилятор не выдаёт предупреждений о возможных ошибках в коде, которые можно обнаружить только с помощью тщательного тестирования. В целом фрагменты кода, использующие варианты, можно считать интерпретируемым кодом, поскольку многие операции не могут быть разрешены до момента выполнения. Это может повлиять на скорость работы кода.

В результате, как только переменная-вариант объявлена и получила значение типа «вариант», её можно скопировать в любой совместимый или несовместимый тип данных:

Var
V;
Begin
  // variable V can be assigned values of several different types:
  V := 10;
  V := 'Hello, World';
  V := 45.55;
End;

Если переменной присвоен несовместимый тип данных, интерпретатор DelphiScript выполняет преобразование, если это возможно. В противном случае выдается ошибка выполнения. На практике вариант хранит информацию о типе вместе с данными, поэтому DelphiScript работает медленнее, чем эквивалентный скомпилированный код Embarcadero Delphi.

Наборы в скриптах

В DelphiScript нет типов наборов и не поддерживаются операторы с наборами, в отличие от языка Delphi, в котором есть типы наборов и поддерживаются операторы с наборами.

Для использования множеств в скриптах DelphiScript следует использовать встроенные функции, которые позволяют работать с множествами в скрипте.

Дополнительную информацию см. в разделе «Использование множеств в DelphiScript»

Внутренние функции или процедуры

При рассмотрении возможности использования функций и процедур inside рекомендуется создавать автономные функции и процедуры, хотя рекурсивные функции и процедуры также допускаются.

Следующий фрагмент кода функции не рекомендуется:

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

Рекомендуемая структура функции:

Function B
Begin
// blah
End;

Function A
Begin
B;
End;

Ключевое слово Result

Используйте Result ключевое слово для задания возвращаемого значения внутри блока функции. Например:

Function Foo : String;
Begin
Result := 'Foo Foo';
End;

Вложенные подпрограммы

Вложенные процедуры поддерживаются, однако переменные функции верхнего уровня не могут использоваться из вложенной процедуры.

Элементы массива

Тип элементов массива игнорируется и может быть опущен, поэтому эти два объявления равнозначны:

Var
x : array [1..2] of double;

Var
x : array [1..2];

Обратите внимание, что объявлять типы массивов нельзя, но можно объявлять массивы как переменные.

Illegal example:

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

Legal example:

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

Открыть объявление массива

Объявление Open Array объявление не поддерживается.

Ключевое слово «Case»

Ключевое Case ключевое слово может использоваться для любого типа. Таким образом, следующий пример является допустимым:

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

Объявления классов

В DelphiScript нельзя определять новые классы, но можно использовать существующие классы DelphiScript и создавать их экземпляры. Например, ключевое слово TList и TStringList в ваших скриптах.
See also
TList
TStringList

Функция CreateObject

Функцию CreateObject функция может использоваться для создания объектов, которые будут неявно освобождены, когда они больше не будут использоваться.

Поэтому вместо:

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

...можно написать:

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

See also
ФункцияCreateObject.

Генерирование исключений

Ключевое Raise ключевое слово можно использовать без параметров, чтобы повторно вызвать последнее исключение. Ключевое слово Raise также можно использовать с параметром типа строка, чтобы вызвать исключение с указанной строкой сообщения. Объекты Exception не поддерживаются в DelphiScript, поскольку On ключевое слово не поддерживается.

Example:

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

See also
Ключевые слова Try, Finally и Raise.

ThreadVar

В DelphiScript Threadvar ключевое слово обрабатывается как Var. Обратите внимание, что в Embarcadero Delphi переменные, объявленные с использованием ключевого слова Threadvar имеют разные значения в каждом потоке.

Операторы Set

Оператор Set In не поддерживается. Оператор InSet оператор можно использовать для проверки, входит ли значение в набор. Например:

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

Обратите внимание, что операторы множеств в Delphi +, -, *, =, >= не работают корректно. Вместо них используются встроенные функции Delphiscript MkSet, MkSetRange, SetUnion, SetDifference, SetIntersection, SubSet and InSet используются вместо них:

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

Конструкторы [...] Конструкторы множеств не поддерживаются — используйте MkSet функцию для создания набора:

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

See also
Ключевое слово MkSet
Ключевое слово MkSetRange
Ключевое слово InSet
Ключевое слово SetDifference
Ключевое слово SetIntersection
Ключевое слово SetUnion
Ключевое слово SubSet
Ключевое слово InSet

Операторы

Ключевое ^ и @ не поддерживаются.

Директивы

Следующие директивы не поддерживаются (обратите внимание, что некоторые из них устарели и также не поддерживаются 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.

Также обратите внимание, что in директива в Uses игнорируется.

Игнорируемые ключевые слова

Ключевое слово interface, implementation, program и unit в DelphiScript игнорируются. Скрипты могут содержать их, но они не оказывают никакого влияния — однако эти ключевые слова могут повысить читаемость скриптов.

Неподдерживаемые ключевые слова

Следующие ключевые слова не поддерживаются в DelphiScript:

  • as, asm, class, dispinterface, exports, finalization, inherited, initialization, inline, interface, is, library, object, out, property, record, resourcestring, set, supports, type.

Следующие функции Delphi RTL не поддерживаются в DelphiScript:

  • Abort, Addr, Assert, Dec, FillChar, Finalize, Hi, High, Inc, Initialize, Lo, Low, New, Ptr, SetString, SizeOf, Str, UniqueString, VarArrayRedim, VarArrayRef, VarCast, VarClear, VarCopy.

Функции из модуля Windows языка Delphi (файл windows.pas файла) не поддерживаются (например, функция RGB функция не поддерживается).

Использование API Altium Designer в скриптах

Вы не можете создавать собственные типы записей или классов с помощью DelphiScript и создавать их экземпляры в скрипте, однако вы можете использовать определенные классы из API Altium Designer. Например, TStringList и TList классы можно создавать экземпляры и использовать в качестве контейнеров для хранения данных (обычно одного и того же типа) в соответствии с потребностями скрипта.

Объектные интерфейсы API, представляющие объекты Altium Designer, доступны для использования в скриптах. Например, у вас есть возможность обновлять объекты проекта в документах схемы и печатной платы с помощью интерфейсов объектов схемы и интерфейсов объектов печатной платы.

По соглашению к названиям интерфейсов добавляется префикс «I». Например, IPCB_Board представляет интерфейс для существующего документа печатной платы.

Пример использования интерфейсов печатной платы в скрипте:

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;

В скриптах можно использовать следующие API:

  • некоторые функции и классы Embarcadero Delphi™, а также расширения DelphiScript
  • Клиентский API
  • API сервера PCB
  • API сервера схем
  • API сервера Workspace Manager
  • API интегрированной библиотеки
  • Функции API Altium Designer
  • Параметрические процессы

Дополнительная информация

Ознакомьтесь со скриптами в коллекции скриптов, доступной для скачивания, чтобы увидеть интерфейсы и функции объектов Altium Designer, а также объекты и функции Delphi, используемые в скриптах.

Обратитесь к основной документации по скриптам, чтобы получить информацию о написании скриптов для Altium Designer.

Обратитесь к руководству «Использование API Altium Designer », чтобы узнать подробности об использовании объектов проектирования и их интерфейсов в ваших скриптах.

Ознакомьтесь со справочником по API Altium Designer, чтобы получить информацию о наборе API Altium Designer и их объектах интерфейса для скриптов.

AI-LocalizedЛокализовано с помощью ИИ
Если вы обнаружили проблему, выделите текст/изображение и нажмитеCtrl + Enter, чтобы отправить нам свой отзыв.
Доступность функций

Доступные вам функции зависят от того, какое решение Altium вы используете: Altium Develop, Altium Agile Teams, Altium Agile Enterprise или Altium Designer (при активной подписке).

Если вы не видите описанную функцию в используемом вами программном обеспечении, свяжитесь с отделом продаж Altium, чтобы узнать больше.

Устаревшая документация

Документация Altium Designer больше не разделена по версиям ПО. Если вам необходим доступ к документации по старым версиям Altium Designer, посетите раздел Устаревшая документация на странице Прочие установщики.

Content