Presse anhalten! Zugriff auf nicht übergebene Parameter ist … möglich

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.

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.