Instrukcje i operatory

Instrukcje DelphiScript

Instrukcja w DelphiScript jest uznawana za „prostą”, gdy nie zawiera żadnych innych instrukcji. Przykładami prostych instrukcji są instrukcje przypisania oraz wywołania procedur.

Simple statements:

X := Y + 10; // assignment

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

Instrukcja złożona składa się z wielu instrukcji.

Compound statements:

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

W DelphiScript, gdy wartości są przypisywane do zmiennych, używa się operatora dwuznaku „dwukropek-równa się”: :=

Podczas testowania równości używa się operatora równości: =

Instrukcje warunkowe

DelphiScript ma instrukcje sterujące, które wpływają na przepływ wykonywania w skrypcie. Najczęściej używaną instrukcją sterującą jest If..Then instrukcja warunkowa.

Instrukcja If Then

Instrukcja If..Then służy do sterowania warunkowego. Składnia jest następująca:

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

Instrukcja Case Of

Aby uniknąć złożonego zestawu instrukcji If, często można je zastąpić instrukcjami Case. Instrukcja case w wyrażeniu służy do wyboru wartości, listy możliwych wartości lub zakresu wartości.

W instrukcji Case można używać dowolnych typów, ponieważ DelphiScript jest językiem nietypowanym. Instrukcje Case mogą zawierać część Else, która jest wykonywana, jeśli żadna z etykiet nie odpowiada wartości selektora (w warunku 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;

Instrukcja With

Instrukcja With to skrót w DelphiScript. Podczas odwoływania się do zmiennej typu rekordowego (lub obiektu) można użyć instrukcji „with” zamiast każdorazowego powtarzania jej nazwy.

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;

Pętla For To Do

Instrukcja For..To..Do zapewnia metodę wielokrotnego wykonywania bloku kodu (jednej lub wielu linii kodu). Podstawowa składnia jest następująca:

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

ForPętle For..To..Do są często używane do inicjalizacji tablicy. Kierunek zliczania w pętli For..To..Do można kontrolować, używając alternatywnie słowa kluczowego DownTo, aby dekrementować pętlę. DelphiScript udostępnia instrukcję Break/Exit, aby przedwcześnie zakończyć pętlę For..To..Do.

Pętla Repeat Until

Instrukcja Repeat jest wykonywana wielokrotnie, aż wyrażenie boolowskie będzie prawdziwe. Instrukcja Repeat jest zawsze wykonywana co najmniej raz.

Example:

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

Pętla While Do

Instrukcja While jest podobna do instrukcji Repeat, z tą różnicą, że warunek sterujący jest oceniany przed pierwszym wykonaniem sekwencji instrukcji. W związku z tym, jeśli warunek jest fałszywy, sekwencja instrukcji nie zostanie wykonana ani razu.

Example:

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

Instrukcja Continue

Instrukcja Continue pomija ciało pętli, podobnie jak instrukcja Goto. Instrukcja continue powoduje przejście wykonywanego skryptu do następnej iteracji w bieżącej pętli For, While lub 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;

Instrukcja Goto Label

Instrukcja Goto ma postać Goto label, która przenosi wykonywanie skryptu do instrukcji oznaczonej podaną etykietą. Aby oznaczyć instrukcję, etykieta musi zostać najpierw zadeklarowana, a następnie instrukcja docelowa poprzedzona etykietą i dwukropkiem: label: statement

Etykieta (Label) może być dowolnym poprawnym identyfikatorem. Deklaracja Label oraz instrukcja Goto muszą należeć do tego samego bloku kodu w skrypcie. Dlatego nie jest możliwe przeskoczenie do wnętrza procedury lub funkcji ani wyskoczenie z niej.

Example:

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

Instrukcja Exit

Instrukcja Exit natychmiast wraca z funkcji lub procedury. Jeśli wywołasz Exit wewnątrz bloku Try..Finally, część Finally zostanie wykonana przed powrotem z podprogramu. Jeśli procedura Exit zostanie wywołana z głównej części skryptu, wykonywanie skryptu zostanie zakończone.

Example:

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

Instrukcja Break

Instrukcja Break powoduje, że wykonywany skrypt wychodzi z bieżącej pętli For, While lub Repeat. Wykonywanie skryptu jest kontynuowane od kolejnej wykonywalnej linii po bieżącej pętli.

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;

Operatory wyrażeń DelphiScript

Ogólnie rzecz biorąc, wyrażenie jest poprawną kombinacją stałych, zmiennych, wartości literałowych, operatorów oraz wyników funkcji. Wyrażenia służą do określenia wartości przypisywanej do zmiennej, do obliczenia parametru funkcji lub do sprawdzenia warunku. Wyrażenia mogą zawierać wywołania funkcji.

DelphiScript ma szereg operatorów logicznych, arytmetycznych, boolowskich i relacyjnych. Operatory te są pogrupowane według kolejności priorytetów (patrz poniżej), która różni się od kolejności priorytetów używanych w Basic, C itd. Na przykład operatory AND i OR mają priorytet w porównaniu z operatorami relacyjnymi.

Jeśli napiszesz a<b and c<d, DelphiScript najpierw wykona operację AND, co spowoduje błąd. Aby zapobiec temu problemowi i zdefiniować priorytet, każde wyrażenie < należy ująć w nawiasy: (a<b) and (c<d);

Obsługiwane operatory DelphiScript wymienione poniżej są pokazane według kolejności priorytetów.

Operatory pogrupowane według priorytetu

Zwróć uwagę, że operatory jednoargumentowe (unarne) mają najwyższy priorytet.

Not

Boolowskie lub bitowe NOT.

Multiplicative and Bitwise Operators

*

Mnożenie arytmetyczne.

/

Dzielenie zmiennoprzecinkowe.

div

Dzielenie całkowite.

mod

modulo (reszta z dzielenia całkowitego).

and

Boolowskie lub bitowe AND.

shl

Przesunięcie bitowe w lewo.

shr

Przesunięcie bitowe w prawo.

Additive Operators

+

Dodawanie arytmetyczne, konkatenacja łańcuchów.

-

Odejmowanie arytmetyczne.

or

Boolowskie lub bitowe OR

xor

Boolowskie lub bitowe EXCLUSIVE OR.

Relational and Comparison Operators (lowest precedence)

=

Test równości.

<>

Test nierówności.

<

Test „mniejsze niż”.

>

Test „większe niż”.

<=

Test „mniejsze lub równe”.

>=

Test „większe lub równe”.

Zwróć też uwagę, że operatory ^ i @ nie są obsługiwane przez DelphiScript.

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

The features available to you depend on which Altium solution you have – Altium Develop, an edition of Altium Agile (Agile Teams or Agile Enterprise), or Altium Designer (on active term).

If you don’t see a discussed feature in your software, contact Altium Sales to find out more.

Legacy Documentation

Altium Designer documentation is no longer versioned. If you need to access documentation for older versions of Altium Designer, visit the Legacy Documentation section of the Other Installers page.

Content