4D Blog

Home Product Don’t be afraid of undefined values

Don’t be afraid of undefined values

October 11, 2017

Product

With 4D v16 R4, we introduced Object Notation which is a great enhancement to the 4D language: your code is fast, flexible, efficient and elegant! This feature created a lot of interest on the 4D forums and we received a lot of feedback from our customers highlighting situations when there were undefined values making the code challenging to write.

With 4D v16 R5, we have taken your feedback into account and have simplified the use of undefined properties and values with Object Notation.

This accomplishment consists of two parts: first, the 4D language is now accepting undefined values anywhere in an expression using object notation. Secondly, whenever you assign an undefined value to a variable, the variable is now set to a default value according to its type (0 for numeric, “” for string, etc.).

Read an undefined property or value

In prior versions, reading the property of a non-existing object generated an error and stopped the code execution. Now in 4D v16 R5, it produces an undefined value.

Let’s look at an example where you want to check the existence of the object property p2 in $o.p1.p2 and you are not sure that the $o.p1 object is defined:

In 4D v16 R4, you should first check if the p1 property is defined and then do the same for p2:

C_OBJECT($o)
$o:=InitObject
If ($o.p1#Null) // Check if p1 is defined
   If ($o.p1.p2#Null) // Check if p2 is defined
     $o.p1.p2.p3:="some text"

In 4D v16 R5, you can simply write the code below … even if p1 is undefined.

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

ConverT undefined valueS

TYPE conversion commands NOW accept undefined values

The String, Num, Date, and Time commands now accept undefined values and return a default value according to the type. To complete this command set we have created a new Bool command, which returns False when you pass an undefined value. This update is especially useful when calling 4D commands.

For instance, if a 4D command expects a text expression as a parameter, you cannot pass an undefined value. Thus, you have to write this type of code in 4D v16 R4 and verify if the property exists before using the 4D command:

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, you can just write the code below. The String command checks and converts the undefined value for you. Now, you only need a single line of code instead of four!

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)

 

Assigning an undefined value

From now on, if you assign an undefined value to a variable, the variable is set to its default type value (0 for a numeric, “” for a string, etc.).

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

In fact, you can now pass an undefined value as a parameter to a project method, too. It works exactly the same way. The value is immediately converted according to the declared parameter type and set to its default type value.

Finally, you can also pass undefined values to Case of and If statements. In this case, 4D considers an undefined value as False:

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

For more details, you can take a look at the Using object notation article.

Discuss

Tags Objects, Programming, v16 R5, v17

Latest related posts

  • December 3, 2025

    Give AI to a 30 years old 4D application

  • November 28, 2025

    ORDA – Handle an event-driven logic during database operations

  • November 27, 2025

    ORDA – Permissions – Restrict / allow web access to the resources in one click

Fabrice Mainguené
Fabrice Mainguené
• Product Owner •Fabrice Mainguené joined 4D Program team in November, 2016. As a Product Owner, he is in charge of writing the user stories then translating it to functional specifications. His role is also to make sure that the feature implementation delivered is meeting the customer need.After obtaining a Bachelor degree in Computer Science at CNAM, Fabrice joined a small software publishing company as a Windev developer. Then he worked for different companies in industry and trade areas as a Windev and web developer as well as technical advisor on new features.
  • Deutsch
  • Français
  • English
  • Português
  • Čeština
  • Español
  • Italiano
  • 日本語

Categories

Browse categories

  • AI
  • 4D View Pro
  • 4D Write Pro
  • 4D for Mobile
  • Email
  • Development Mode
  • 4D Language
  • ORDA
  • User Interface / GUI
  • Qodly Studio
  • Server
  • Maintenance
  • Deployment
  • 4D Tutorials
  • Generic
  • 4D Summit sessions and other online videos

Tags

4D AIKit 4D for Android 4D for iOS 4D NetKit 4D Qodly Pro 4D View Pro 4D Write Pro 20 R10 21 Administration AI Artificial Intelligence Build application Class Client/Server Code editor Collections Compatibility settings Formula Google Listbox Logs Mail Network Objects OpenAI ORDA PDF Pictures Preemptive Programming REST Scalability Security Session Source control Speed Spreadsheet Tutorial UI User Experience v20 vscode Web Word processor

Tags

4D AIKit 4D for Android 4D for iOS 4D NetKit 4D Qodly Pro 4D View Pro 4D Write Pro 20 R10 21 Administration AI Artificial Intelligence Build application Class Client/Server Code editor Collections Compatibility settings Formula Google Listbox Logs Mail Network Objects OpenAI ORDA PDF Pictures Preemptive Programming REST Scalability Security Session Source control Speed Spreadsheet Tutorial UI User Experience v20 vscode Web Word processor
Subscribe to 4D Newsletter

© 2025 4D SAS - All rights reserved
Terms & Conditions | Legal Notices | Data Policy | Cookie Policy | Contact us | Write for us


Subscribe to 4D Newsletter

* Your privacy is very important to us. Please click here to view our Policy

Contact us

Got a question, suggestion or just want to get in touch with the 4D bloggers? Drop us a line!

* Your privacy is very important to us. Please click here to view our Policy