Unterschiede zwischen einem Parameter nach Wert und nach Referenz identifizieren

Abgeschlossen

Sie können Parameter nach Wert oder nach Referenz übergeben. Jede Methode bietet unterschiedliche Vorteile.

Parameter nach Wert übergeben

Wenn Sie einen Parameter nach Wert übergeben, übergeben Sie den Wert einer Variablen an eine Prozedur. Diese Methode ist bei grundlegenden Typen standardmäßig immer der Fall.

Im nächsten Beispiel ruft die Funktion MyFunction einen Parameter vom Typ „Ganzzahl“ ab, ändert den Wert und gibt den Wert „paramA“ zurück. Die Exit-Anweisung gibt den Wert zurück.

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;

Der Wert myInteger bleibt auch nach Ausführung der Prozedur MyFunction bei 23.

Parameter nach Referenz übergeben

Eine Variable weist immer einen bestimmten Teil des Computerspeichers zu. Wenn Sie einen Parameter als Referenz übergeben, übergeben Sie den Wert nicht an eine Prozedur, sondern an die Referenz, die ihre Position im Speicher darstellt. Mit dieser Methode arbeiten Sie direkt im Speicher. Daher wirkt sich die Änderung dieses Werts auch auf die aufrufende Prozedur aus. Sie müssen einem Parameter das Schlüsselwort var voranstellen, um einen Parameter als Referenz zu übergeben.

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;

Zurückgeben komplexer Typen

Sie können jetzt Ihren AL-Code vereinfachen und komplexe Typen zurückgeben, anstatt diese in den Methodenparametern zu übergeben.

Die folgende Methode verwendet beispielsweise einen Namen und gibt den ersten Kundendatensatz zurück, der dem Namen entspricht. Beachten Sie, wie die Signatur den Rückgabetyp am Ende der Prozedurdeklaration angibt und wie die Prozedur beendet wird, indem der gefundene Kundendatensatz zurückgegeben wird.


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

Mit dieser neuen Funktion können Sie Mitglieder direkt über die zurückgegebene Variable aufrufen, z. B. in Ausdrücken.

Als Beispiel könnten Sie die Informationen oben in einer IF-Anweisung verwenden, z. B.
if GetCustomerByName('SomeName')."Balance (LCY)" > 0 then.

Weitere Beispiele für die Rückgabe komplexer Typen finden Sie hier:

Rückgabe des komplexen Typs