ステートメントと演算子

DelphiScript のステートメント

DelphiScript のステートメントは、他のステートメントを含まない場合に「単純(simple)」と見なされます。単純ステートメントの例としては、代入ステートメントやプロシージャ呼び出しがあります。

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 ステートメントは、値、可能な値のリスト、または値の範囲を選択するために使用されます。

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 ステートメントは 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 ステートメントは、コードブロック(1 行以上のコード)を繰り返しループするための方法を提供します。基本構文は次のとおりです:

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

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

Repeat Until ループ

Repeat ステートメントは、Boolean 式が true になるまで繰り返し実行されます。Repeat ステートメントは常に少なくとも 1 回は実行されます。

Example:

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

While Do ループ

While ステートメントは Repeat ステートメントに似ていますが、制御条件がステートメント列の最初の実行前に評価される点が異なります。したがって、条件が false の場合、ステートメント列は一度も実行されません。

Example:

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

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 Label ステートメント

Goto ステートメントは Goto label の形式で、指定したラベルが付いたステートメントへスクリプトの実行を移します。ステートメントにマークを付けるには、まずラベルを宣言し、その後、対象ステートメントの前にラベルとコロンを付けます: label: statement

ラベルは有効な識別子であれば何でも構いません。Label 宣言と Goto ステートメントは、スクリプト内の同一コードブロックに属している必要があります。そのため、プロシージャや関数の内部へジャンプしたり、外部へジャンプしたりすることはできません。

Example:

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

Exit ステートメント

Exit ステートメントは、関数またはプロシージャから直ちに戻ります。Try..Finally ブロック内から Exit を呼び出した場合、サブルーチンが戻る前に Finally 部分が実行されます。メインのスクリプト本体内から Exit プロシージャが呼び出された場合、スクリプトの実行は終了します。

Example:

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

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 には、論理、算術、Boolean、関係演算子が多数あります。これらの演算子は優先順位(下記参照)によってグループ化されており、Basic や C などで使用される優先順位とは異なります。たとえば、AND および OR 演算子は、関係演算子よりも優先されます。

a<b and c<d と書くと、DelphiScript は最初に AND 演算を行い、その結果エラーになります。この問題を防ぎ、優先順位を定義するには、各 < 式を括弧で囲む必要があります: (a<b) and (c<d);

以下に示す DelphiScript のサポート演算子は、優先順位の順に並んでいます。

優先順位でグループ化された演算子

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

Not

Boolean またはビット単位の NOT。

Multiplicative and Bitwise Operators

*

算術乗算。

/

浮動小数点除算。

div

整数除算。

mod

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

and

Boolean またはビット単位の AND。

shl

ビット単位の左シフト。

shr

ビット単位の右シフト。

Additive Operators

+

算術加算、文字列連結。

-

算術減算。

or

Boolean またはビット単位の OR

xor

Boolean またはビット単位の排他的 OR。

Relational and Comparison Operators (lowest precedence)

=

等しいかどうかをテスト。

<>

等しくないかどうかをテスト。

<

より小さいかどうかをテスト。

>

より大きいかどうかをテスト。

<=

以下かどうかをテスト。

>=

以上かどうかをテスト。

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

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

利用できる機能は、所有する Altium ソリューション (Altium DevelopAltium Agile のエディション (Agile Teams、または Agile Enterprise)、または Altium Designer (有効な期間)) によって異なります。

説明されている機能がお使いのソフトウェアに表示されない場合、Altium の営業担当者にお問い合わせください

従来のドキュメント

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

Content