Unterschiede zwischen einem Parameter nach Wert und nach Referenz identifizieren
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: