Операторы и выражения

Операторы DelphiScript

Оператор в DelphiScript считается «простым», если он не содержит никаких других операторов. Примерами простых операторов являются операторы присваивания и вызовы процедур.

Simple statements:

X := Y + 10; // assignment

ShowMessage('Hello World!'); // procedure call

Составной оператор состоит из нескольких операторов.

Compound statements:

Begin
  If A > B Then ShowMessage('A is bigger');
  Else ShowMessage('B is bigger');
  A := 0;
  B := 0;
End;

В DelphiScript при присваивании значений переменным используется оператор «двоеточие-равно» (:=): :=

При проверке на равенство используется оператор равенства (=): =

Условные операторы

В DelphiScript есть управляющие операторы, которые влияют на ход выполнения скрипта. Наиболее распространённый управляющий оператор — условный оператор If..Then.

Оператор If Then

Оператор If..Then используется для условного управления. Синтаксис:

If Condition Then
  Begin
  // code here
  End
Else
  Begin
  // code here
  End;

Оператор Case Of

Чтобы избежать сложного набора операторов If, их часто можно заменить операторами Case. Оператор case в выражении используется для выбора значения, списка возможных значений или диапазона значений.

В операторе Case можно использовать любые типы, поскольку DelphiScript — нетипизированный язык. Операторы Case могут содержать ветку Else, которая выполняется, если ни одна из меток не соответствует значению селектора (в условии Case Of).

Example 1:

Case Char of
  '+' : Text := 'Plus sign';
  '-' : Text := 'Minus sign';
  '*', '/': Text := 'Multiplication or division';
  '0'..'9': Text := 'Number';
  'a'..'z': Text := 'Lowercase character';
  'A'..'Z': Text := 'Uppercase character';
else
  Text := 'Unknown character';
End;

Example 2:

Case UserName of
  'Jack', 'Joe' : IsAdministrator := true;
  'Fred' : IsAdministrator := false;
else
  Raise('Unknown User');
End;

Оператор With

Оператор With — это сокращённая форма в DelphiScript. При обращении к переменной типа record (или объекту) можно использовать оператор with вместо повторения её имени каждый раз.

Normal version:

Form.Canvas.Pen.Width := 2;
Form.Canvas.Pen.Color := clSilver;

Version using With:

With Form.Canvas.Pen do
Begin
  Width := 2;
  Color := clSilver;
End;

Цикл For To Do

Оператор For..To..Do предоставляет способ многократно выполнять блок кода (одну или несколько строк кода). Базовый синтаксис:

For counter := start To end Do
Begin
  // code here
End;

ForЦиклы часто используются для инициализации массива. Направление счётчика в цикле For..To..Do можно управлять, альтернативно используя ключевое слово DownTo для декремента цикла. DelphiScript предоставляет оператор Break/Exit для преждевременного выхода из цикла For..To..Do.

Цикл Repeat Until

Оператор Repeat выполняется повторно до тех пор, пока булево выражение не станет истинным. Оператор Repeat всегда выполняется как минимум один раз.

Example:

Repeat
  Write('Enter a value (0..9): ');
  ShowMessage(IntToStr(I));
Until (I >= 0) and (I <= 9);

Цикл While Do

Оператор While похож на оператор Repeat, за исключением того, что управляющее условие вычисляется до первого выполнения последовательности операторов. Следовательно, если условие ложно, последовательность операторов не выполняется ни разу.

Example:

Randomize;
I := 0;
While I < 1000 do
Begin
  I := I + Random (100);
  Add ('Random Number: ' + IntToStr (I));
End;

Оператор Continue

Оператор Continue пропускает тело цикла, аналогично оператору Goto. Оператор continue заставляет выполняемый скрипт перейти к следующей итерации в текущем цикле For, While или Repeat.

Example:

var
  F: File;
  i: Integer;
Begin
  For i := 0 to (FileListBox1.Items.Count - 1) do
  Begin
    Try
    If FileListBox1.Selected[i] Then
    Begin
      If not FileExists(FileListBox1.Items.Strings[i]) then
      Begin
        MessageDlg('File: ' + FileListBox1.Items.Strings[i] + 'not found', mtError, [mbOk], 0);
        Continue;
      End;
      AssignFile(F, FileListBox1.Items.Strings[i]);
      Reset(F, 1);
      ListBox1.Items.Add(IntToStr(FileSize(F)));
      CloseFile(F);
    End;
    Finally
      { do something here }
    End;
  End;
End;

Оператор Goto Label

Оператор Goto имеет форму Goto label, которая передаёт выполнение скрипта оператору, помеченному указанной меткой. Чтобы пометить оператор, метку нужно сначала объявить, а затем целевой оператор должен быть предварён меткой и двоеточием: label: statement

Метка (Label) может быть любым допустимым идентификатором. Объявление Label и оператор Goto должны принадлежать одному и тому же блоку кода в скрипте. Поэтому невозможно выполнить переход внутрь или наружу процедуры или функции.

Example:

Label StartHere;
  // code
StartHere: Beep;
Goto StartHere;

Оператор Exit

Оператор Exit немедленно возвращает управление из функции или процедуры. Если вызвать Exit внутри блока Try..Finally, то часть Finally будет выполнена перед возвратом из подпрограммы. Если процедура Exit вызывается из основного тела скрипта, выполнение скрипта будет завершено.

Example:

Begin
  Server := SchServer;
  If Server = Nil Then
  Begin
    ShowError('No SchServer started');
    Exit;
End;

Оператор Break

Оператор Break заставляет выполняемый скрипт выйти из текущего цикла For, While или Repeat. Выполнение скрипта продолжается со следующей исполняемой строки после текущего цикла.

Example:

Var
  S: string;
Begin
  While True do
  Begin
    ReadLn(S);
    Try
      if S = '' then Break;
      WriteLn(S);
    Finally
      { do something for all cases }
    End;
  End;
End;

Операторы выражений DelphiScript

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

В DelphiScript есть ряд логических, арифметических, булевых и реляционных операторов. Эти операторы сгруппированы по порядку приоритета (см. ниже), который отличается от порядка приоритета, используемого в Basic, C и т. п. Например, операторы AND и OR имеют приоритет по сравнению с реляционными.

Если вы напишете a<b and c<d, DelphiScript сначала выполнит операцию AND, что приведёт к ошибке. Чтобы избежать этой проблемы и задать приоритет, каждое выражение < нужно заключать в круглые скобки: (a<b) and (c<d);

Поддерживаемые операторы DelphiScript, перечисленные ниже, показаны в порядке убывания приоритета.

Операторы, сгруппированные по приоритету

Обратите внимание, что унарные операторы имеют наивысший приоритет.

Not

Булево или побитовое NOT.

Multiplicative and Bitwise Operators

*

Арифметическое умножение.

/

Деление с плавающей точкой.

div

Целочисленное деление.

mod

modulus (остаток от целочисленного деления).

and

Булево или побитовое AND.

shl

Побитовый сдвиг влево.

shr

Побитовый сдвиг вправо.

Additive Operators

+

Арифметическое сложение, конкатенация строк.

-

Арифметическое вычитание.

or

Булево или побитовое OR

xor

Булево или побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ (XOR).

Relational and Comparison Operators (lowest precedence)

=

Проверка на равенство.

<>

Проверка на неравенство.

<

Проверка «меньше».

>

Проверка «больше».

<=

Проверка «меньше или равно».

>=

Проверка «больше или равно».

Также обратите внимание, что операторы ^ и @ не поддерживаются DelphiScript.

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

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

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

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

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

Content