パラメーターの値と参照による差異の識別

完了

パラメーターは、値または参照によって渡すことができます。 それぞれのメソッドによって利点が異なります。

値によるパラメーターの引き渡し

値でパラメーターを渡すと、変数の値がプロシージャに渡されます。 このメソッドは、基本型では常に既定で使用されます。

次の例では、関数 MyFunction が整数型のパラメータを取得し、値を変更して、paramA の値を返します。 Exit ステートメントは値を返します。

trigger OnRun()
var
    myInteger : Integer;
    myResult : Integer;
begin
    myInteger := 23;
    myResult := MyFunction(myInteger);

    Message('myInteger: %1', myInteger);  // Displays 23
    Message('myResult: %1', myResult);    // Displays 17
end;

procedure MyFunction(paramA : Integer) : Integer
begin
  paramA := 17;
  Exit(paramA);
end;

myInteger の値は、MyFunction プロシージャが実行された後も 23 のままになります。

参照によるパラメータの引き渡し

変数には、常にコンピューター メモリの特定の部分が割り当てられます。 参照によってパラメーターを渡す場合は、プロシージャに値を渡すのではなく、参照 (メモリ内の位置) を指定します。 このメソッドを使用することにより、直接メモリを操作できます。 その結果、その値を変更すると、プロシージャの呼び出しにも影響します。 参照によってパラメーターを渡すには、パラメーターの前に var キーワードを追加する必要があります。

trigger OnRun()
var
    myInteger : Integer;
    myResult : Integer;
begin
    myInteger := 23;
    myResult := MyFunction(myInteger);

    Message('myInteger: %1', myInteger);  // Displays 17
    Message('myResult: %1', myResult);    // Displays 17
end;

procedure MyFunction(var paramA : Integer) : Integer
begin
  paramA := 17;
  exit(paramA);
end;

複合データ型を返す

メソッド パラメーターでこれらの値を渡す代わりに、AL コードを簡略化して複合型を返す必要があります。

たとえば、次のメソッドは、名前を引き数として取り、その名前に一致する最初の顧客レコードを返します。 プロシージャ宣言の末尾に戻り値タイプとして署名が指定され、プロシージャが見つかった顧客レコードを返すことによって終了していることに注意してください。


procedure GetCustomerByName(Name: Text): record Customer;
var
    Customer: record Customer;
begin
    Customer.SetFilter(Name, '@' + Name + '*');
    Customer.FindFirst();
    exit(Customer);
end;

この新しい機能を使用すると、たとえば式で返された変数にメンバーを直接呼び出せます。

たとえば、上記の例を次のような IF ステートメントで使用できます。
if GetCustomerByName('SomeName')."Balance (LCY)" > 0 then.

次に、複合型を返す場合の例をさらに示します。

複合型タイプを返す