パラメーターの値と参照による差異の識別
パラメーターは、値または参照によって渡すことができます。 それぞれのメソッドによって利点が異なります。
値によるパラメーターの引き渡し
値でパラメーターを渡すと、変数の値がプロシージャに渡されます。 このメソッドは、基本型では常に既定で使用されます。
次の例では、関数 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.
次に、複合型を返す場合の例をさらに示します。