Eine Methode oder Funktion kann optionale Parameter haben. Manchmal wird die Funktion mit zwei Parametern aufgerufen, ein anderes Mal mit drei Parametern. Wir alle haben schon einmal davon geträumt, auf die Parameter zuzugreifen, ohne sie zu zählen, zu prüfen, ob der Parameter übergeben wurde, oder einfach nicht prüfen zu müssen, ob die mit dem Parameter verbundene Variable initialisiert wurde. Dies könnte den Code viel einfacher und lesbarer machen, ohne die ganzen „If“- oder „Count parameters“-Zeilen.
Nun, träumen Sie nicht länger und wechseln Sie zu 4D v19 R3! Die Verwaltung von Methoden- und Funktionsparametern war noch nie so einfach.
Zugriff auf die Parameter
Für Parameter, die Sie im Prototyp einer Funktion oder Methode deklariert haben, wird die Variable jetzt mit dem leeren Wert instanziiert, wenn der Parameter während des Aufrufs nicht übergeben wird. Selbst im kompilierten Modus gibt es dafür keinen Laufzeitfehler mehr. Auf dieser Dokumentationsseite finden Sie eine Tabelle mit den Entsprechungen für die einzelnen Variablentypen.
Im folgenden Beispiel verwendet die Funktion die Parameter $param1 und $param2 ohne Prüfung. Wenn beim Aufruf der Funktion die Parameter $param1 und/oder $param2 nicht übergeben werden, instanziiert 4D die Textvariable mit einem leeren String:
// "concate" function class
Function concate ( : ; : ) ( +""+ ) $param1 Text $param2 Text
Alert$param1$param2
// "method1" method
$class. ("Hallo";" Welt") . ("Hallo") concate // Display: "Hello world"
.
$classconcate // Display: "Hello "
$class()concate // Display: " "
Seien Sie vorsichtig. Damit 4D Ihre Variable instanziieren kann, muss es den Typ dieser Variable kennen. Wenn Sie die Notation ${i} verwenden und den Parameter nicht übergeben und deklariert haben, werden Sie im kompilierten Modus immer einen Ausführungsfehler erhalten.
Initialisieren Sie die Parameter
Wir haben gerade gesehen, dass, wenn ein Parameter nicht übergeben wird, die zugehörige Variable mit dem leeren Wert instanziiert wird. Jetzt können Sie also den Choose Befehl direkt einen Wert definieren, wenn der Parameter nicht übergeben wird.
Hier ist ein Beispiel mit einer Methode und der #DECLARE Anweisung:
// "myAlert" method
()
#DECLARE($param1: Text; $param2: Text)
$param1 :=Choose(Count parameters>=1 ; $param1; "Hallo")
$param2 :=Choose(Count parameters>=2 ; $param2; "world")
Alert ($param1+""+$param2)
// "method1" method
myAlert // Display: "Hello world"
Was ist mit den Komponenten?
Um von dieser Vereinfachung zu profitieren, müssen die aufgerufene Methode und die aufrufende Methode neu kompiliert werden. Im Falle einer Methode, die von der Host-Basis und einer Komponente gemeinsam genutzt wird, müssen also beide Projekte neu kompiliert werden.
Aber was ist mit kompilierten Komponenten, deren Quellen ich nicht habe? Keine Sorge, Sie können sie weiterhin wie bisher verwenden. Sie brauchen Ihren Code nicht zu ändern.
Was kommt als Nächstes?
Diese neue Funktion gibt Ihnen eine Menge Ideen für Ihre Methoden und Funktionen. Teilen Sie Ihre Tipps gerne im Forum mit.