式と演算子

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..Then 文は、条件分岐制御に使用されます。構文は次のとおりです:

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

Case Of 文

複雑な一連の If 文の複雑な連鎖を避けるため、これらを Case ステートメントに置き換えられることがよくあります。式内のCaseステートメントは、値、取り得る値のリスト、または値の範囲を選択するために使用されます。

DelphiScriptは型付けのない言語であるため、Case文では任意の型を使用できます。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 With 文は、DelphiScript の省略形です。レコード型の変数(またはオブジェクト)を参照する際、その名前を毎回繰り返す代わりに「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..To..Do 文は、コードブロック(1行以上のコード)を繰り返し実行するための手段を提供します。基本的な構文は次のとおりです:

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

For ループは、配列の初期化によく使用されます。ループ内の For..To..Do ループのカウンターの方向は、 DownTo キーワードを交互に使用してループをデクリメントすることで制御できます。DelphiScriptでは、ループを For..To..Do ループを途中で終了させるために、Break/Exit文を提供しています。

Repeat Until ループ

この Repeat 文は、ブール式が真になるまで繰り返し実行されます。この Repeat 文は常に少なくとも1回は実行されます。

Example:

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

While Do ループ

A While 文は Repeat 文と似ていますが、制御条件が文のシーケンスの最初の実行前に評価される点が異なります。したがって、条件が偽の場合、文のシーケンスは一切実行されません。

Example:

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

Continue文

Continue Continue 文は、 Goto 文と同様に、ループの本体をスキップします。continue文は、実行中のスクリプトを現在のループの次の反復へと進ませます ForWhile または 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 ラベル文

GOTOラベル文は Goto 文の形式は Goto label という形式であり、スクリプトの実行を、指定されたラベルでマークされた文に移します。文にラベルを付けるには、まずラベルを宣言し、次にそのラベルとコロンを付けて対象の文を記述する必要があります。 label: statement

ラベルには、有効な識別子であれば何でも使用できます。ラベルの宣言と 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 Break 文は、実行中のスクリプトを現在の ForWhile または 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と記述すると、DelphiScriptはまず AND 演算を先に実行し、エラーが発生します。この問題を回避し、優先順位を明確にするために、各 式を括弧で囲む必要があります: (a;

以下に挙げるDelphiScriptでサポートされている演算子は、優先順位の高い順に示されています。

優先順位別に分類された演算子

単項演算子の優先順位が最も高いことに注意してください。

Not

ブール値またはビット単位の NOT。

Multiplicative and Bitwise Operators

*

算術乗算。

/

浮動小数点除算。

div

整数の除算。

mod

剰余(整数除算の余り)。

and

ブール値またはビット単位の AND。

shl

ビット単位の左シフト。

shr

ビット単位の右シフト。

Additive Operators

+

算術加算、文字列連結。

-

算術減算。

or

ブール値またはビット単位の OR

xor

ブール値のOR、またはビット単位の排他的論理和(XOR)。

Relational and Comparison Operators (lowest precedence)

=

等しいかどうかの判定。

>

等しくないかどうかを判定する。

より小さいかどうかを判定します。

>

「より大きい」かどうかを判定します。

=

以下であるかどうかを判定します。

>=

「以上」かどうかを判定します。

また、 ^ および @ 演算子はDelphiScriptではサポートされていない点にも注意してください。

AI-LocalizedAI で翻訳
問題が見つかった場合、文字/画像を選択し、Ctrl + Enter キーを押してフィードバックをお送りください。
機能の提供状況

ご利用可能な機能は、お使いのAltiumソリューション(Altium DevelopAltium Agile TeamsAltium Agile Enterprise、または有効な契約期間中のAltium Designer)によって異なります。

実際にお使いのソフトウェアに文書化されている機能が表示されない場合は、詳細についてAltium Sales までお問い合わせください。

従来のドキュメント

Altium Designer のドキュメントは、バージョンごとに掲載されなくなりました。Altium Designer の旧バージョンのドキュメントは、Other Installers ページの Legacy Documentation の項目をご覧ください。

Content