Keine Angst vor undefinierten Werten

Automatisch übersetzt von Deepl

Mit 4D v16 R4 haben wir die Objektnotation eingeführt, die eine großartige Erweiterung der 4D Sprache darstellt: Ihr Code ist schnell, flexibel, effizient und elegant! Diese Funktion stieß in den 4D Foren auf großes Interesse und wir erhielten viele Rückmeldungen von unseren Kunden, die auf Situationen hinwiesen, in denen undefinierte Werte den Code schwierig zu schreiben machten.

Mit 4D v16 R5, haben wir Ihr Feedback berücksichtigt und die Verwendung von undefinierten Eigenschaften und Werten mit Object Notation vereinfacht.

Diese Errungenschaft besteht aus zwei Teilen: Erstens akzeptiert die 4D Sprache jetzt undefinierte Werte an jeder Stelle eines Ausdrucks mit Objektnotation. Zweitens: Wenn Sie einer Variablen einen undefinierten Wert zuweisen, wird die Variable jetzt auf einen Standardwert entsprechend ihrem Typ gesetzt (0 für numerisch, „“ für String usw.).

Eine undefinierte Eigenschaft oder einen undefinierten Wert lesen

In früheren Versionen erzeugte das Lesen der Eigenschaft eines nicht existierenden Objekts einen Fehler und stoppte die Codeausführung. Jetzt, in 4D v16 R5, wird ein undefinierter Wert erzeugt.

Schauen wir uns ein Beispiel an, bei dem Sie die Existenz der Objekteigenschaft p2 in $o.p1.p2 überprüfen wollen und Sie nicht sicher sind, ob das Objekt $o.p1 definiert ist:

In 4D v16 R4 sollten Sie zunächst prüfen, ob die Eigenschaft p1 definiert ist, und dann dasselbe für p2 tun:

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Prüfen, ob p1 definiert ist
If ($o.p1.p2#Null) // Prüfen, ob p2 definiert ist
$o .p1.p2.p3:="some text"

In 4D v16 R5 können Sie einfach den folgenden Code schreiben … auch wenn p1 nicht definiert ist.

C_OBJECT($o)
$o :=InitObject
If ($o.p1.p2#Null) // Check immediately if p1 and p2 are defined
$o .p1.p2.p3:="irgendein Text"

Konvertierung undefinierter Werte

TYPE-Konvertierungsbefehle JETZT akzeptieren undefinierte Werte

Die String, Num, Date, und Time akzeptieren nun auch undefinierte Werte und geben einen Standardwert entsprechend dem Typ zurück. Um diesen Befehlssatz zu vervollständigen, haben wir einen neuen Bool Befehl, der den Wert False zurückgibt, wenn Sie einen undefinierten Wert übergeben. Dieses Update ist besonders nützlich beim Aufruf von 4D Befehlen.

Wenn zum Beispiel ein 4D Befehl einen Textausdruck als Parameter erwartet, können Sie keinen undefinierten Wert übergeben. Daher müssen Sie diese Art von Code in 4D v16 R4 schreiben und überprüfen, ob die Eigenschaft existiert, bevor Sie den 4D Befehl verwenden:

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Check if p1 is defined
If ($o.p1.p2#Null) // If p1 is defined, you can now check if p2 is defined

READ PICTURE FILE ($o.p1.p2;$i)
else
READ PICTURE FILE ("";$i)
End if
End if

In 4D v16 R5 können Sie einfach den unten stehenden Code schreiben. Der Befehl String Befehl prüft und konvertiert den undefinierten Wert für Sie. Jetzt brauchen Sie nur noch eine einzige Codezeile statt vier!

C_OBJECT($o)
$o :=InitObject
// If $0.p1.p2 is undefined, String return "" and READ PICTURE FILE command opens standard Open file dialog box.
READ PICTURE FILE (String($o.p1.p2);$i)

Zuweisung eines undefinierten Wertes

Wenn Sie von nun an einer Variablen einen undefinierten Wert zuweisen, wird die Variable auf den Standardwert ihres Typs gesetzt (0 für eine numerische Zahl, „“ für einen String usw.).

C_LONGINT($l)
$l :=10
$l :=$o.undefiniert
// In 4D v16 R4, $l does not change, $l=10
// In 4D v16 R5, $l is reinitialized, $l=0

Tatsächlich können Sie jetzt auch einen undefinierten Wert als Parameter an eine Projektmethode übergeben. Das funktioniert genau so. Der Wert wird sofort entsprechend dem deklarierten Parametertyp umgewandelt und auf seinen Standardtypwert gesetzt.

Schließlich können Sie auch undefinierte Werte an Case of und If Anweisungen übergeben. In diesem Fall betrachtet 4D einen undefinierten Wert als False:

If ($o.b)
// if $o.b is undefined this code is not executed
..
.
End if

Weitere Einzelheiten finden Sie in dem Artikel Objektnotation verwenden.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené gehört seit November 2016 zum 4D Program Team. Als Product Owner ist er verantwortlich für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen. Seine Aufgabe ist es auch, sicherzustellen, dass die gelieferte Funktionsimplementierung den Kundenanforderungen entspricht.Nach seinem Bachelor-Abschluss in Informatik am CNAM arbeitete Fabrice als Windev-Entwickler bei einem kleinen Software-Verlag. Danach arbeitete er für verschiedene Unternehmen in Industrie und Handel als Windev- und Webentwickler sowie als technischer Berater für neue Funktionen.