Non temete i valori indefiniti

Tradotto automaticamente da Deepl

Con 4D v16 R4 abbiamo introdotto la notazione a oggetti, che rappresenta un grande miglioramento del linguaggio 4D: il codice è veloce, flessibile, efficiente ed elegante! Questa funzione ha suscitato molto interesse nei forum di 4D e abbiamo ricevuto molti feedback dai nostri clienti che hanno evidenziato situazioni in cui i valori non definiti rendevano difficile la scrittura del codice.

Con 4D v16 R5, abbiamo tenuto conto del vostro feedback e abbiamo semplificato l’uso delle proprietà e dei valori non definiti con la notazione a oggetti.

Questo risultato consiste in due parti: in primo luogo, il linguaggio 4D accetta ora valori non definiti in qualsiasi punto di un’espressione utilizzando la notazione a oggetti. In secondo luogo, ogni volta che si assegna un valore non definito a una variabile, questa viene ora impostata su un valore predefinito in base al suo tipo (0 per i numeri, “” per le stringhe, ecc.).

Leggere una proprietà o un valore non definito

Nelle versioni precedenti, la lettura della proprietà di un oggetto inesistente generava un errore e interrompeva l’esecuzione del codice. Ora, in 4D v16 R5, produce un valore non definito.

Vediamo un esempio in cui si vuole verificare l’esistenza della proprietà dell’oggetto p2 in $o.p1.p2 e non si è sicuri che l’oggetto $o.p1 sia definito:

In 4D v16 R4, si deve prima verificare se la proprietà p1 è definita e poi fare lo stesso per p2:

C_OBJECT($o)
$o :=InitObject
If ($o.p1#Null) // Verificare se p1 è definito
If ($o.p1.p2#Null) // Verificare se p2 è definito
$o .p1.p2.p3:="some text"

In 4D v16 R5, è possibile scrivere semplicemente il codice seguente … anche se p1 è indefinito.

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

Conversione di valori indefiniti

I comandi di conversione dei tipi non accettano ora valori indefiniti.

Il String, Num, Date, e Time accettano ora valori non definiti e restituiscono un valore predefinito in base al tipo. Per completare questo insieme di comandi, abbiamo creato un nuovo comando Bool che restituisce False quando si passa un valore non definito. Questo aggiornamento è particolarmente utile quando si chiamano i comandi 4D.

Ad esempio, se un comando 4D prevede come parametro un’espressione di testo, non è possibile passare un valore indefinito. Pertanto, è necessario scrivere questo tipo di codice in 4D v16 R4 e verificare se la proprietà esiste prima di utilizzare il comando 4D:

C_OBJECTREAD PICTURE FILE($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

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

In 4D v16 R5, è sufficiente scrivere il codice riportato di seguito. Il comando String controlla e converte il valore non definito. Ora è sufficiente una sola riga di codice invece di quattro!

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)

Assegnazione di un valore non definito

D’ora in poi, se si assegna un valore indefinito a una variabile, questa viene impostata al suo valore di tipo predefinito (0 per un numero, “” per una stringa, ecc.).

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 realtà, ora è possibile passare un valore undefined come parametro a un metodo di progetto. Funziona esattamente allo stesso modo. Il valore viene immediatamente convertito in base al tipo di parametro dichiarato e impostato sul valore del tipo predefinito.

Infine, è possibile passare valori indefiniti alle istruzioni Case of e alle istruzioni If. In questo caso, 4D considera un valore non definito come False:

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

Per maggiori dettagli, si può consultare l’articolo Uso della notazione degli oggetti.

Fabrice Mainguené
- Product Owner -Fabrice Mainguené si è unito al team di 4D Program nel novembre 2016. In qualità di Product Owner, è incaricato di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Dopo aver conseguito una laurea in Informatica presso il CNAM, Fabrice è entrato a far parte di una piccola società di pubblicazione di software come sviluppatore Windev. In seguito ha lavorato per diverse aziende del settore industriale e commerciale come sviluppatore Windev e web e come consulente tecnico su nuove funzionalità.