Arresto della stampa! L’accesso ai parametri non passati è… possibile

Tradotto automaticamente da Deepl

Un metodo o una funzione possono avere parametri opzionali. A volte la funzione viene chiamata con due parametri, altre volte con tre parametri. Tutti abbiamo sognato di accedere ai parametri senza contarli, senza controllare se il parametro è stato passato o semplicemente senza dover controllare se la variabile associata al parametro è stata inizializzata. Questo potrebbe rendere il codice molto più semplice e leggibile, senza tutte le righe “If” o “Count parameters”.

Bene, non sognate più e passate a 4D v19 R3! La gestione dei parametri di metodi e funzioni non è mai stata così semplice.

Accesso ai parametri

Ora, per i parametri dichiarati nel prototipo di una funzione o di un metodo, se il parametro non viene passato durante la chiamata, la variabile viene istanziata con un valore vuoto. Anche in modalità compilata, non si ha più un errore di runtime per questo. In questa pagina di documentazione, è presente una tabella con la corrispondenza per ogni tipo di variabile.

Nell’esempio seguente, la funzione utilizza i parametri $param1 e $param2 senza alcun controllo. Se, al momento della chiamata della funzione, non vengono passati i parametri $param1 e/o $param2, 4D istanzia la variabile testo con una stringa vuota:

// "concate" function class
Function concate ( : ; : ) ( +" "+ ) $param1 Text $param2 Text
Alert$param1$param2

// "method1" method
$class. ("Ciao";" mondo") . ("Ciao") . ()concate // Display: "Hello world"
$classconcate // Display: "Hello "
$classconcate // Display: " "

Attenzione. Affinché 4D possa istanziare la vostra variabile, deve conoscerne il tipo. Se si usa la notazione ${i} e non si è passato e dichiarato il parametro, si otterrà sempre un errore di esecuzione in modalità compilata.

Inizializzare i parametri

Abbiamo appena visto che se un parametro non viene passato, la variabile associata viene istanziata al valore vuoto. Ora è possibile utilizzare il comando Choose per definire direttamente un valore se il parametro non viene passato.

Ecco un esempio con un metodo e l’istruzione #DECLARE istruzione:

// "myAlert" method
#DECLARE($param1: Text; $param2: Text)
$param1 :=Choose(Count parameters>=1 ; $param1; "Hello")
$param2 :=Choose(Count parameters>=2 ; $param2; "world")
Alert ($param1+" "+$param2)

// "method1" method
myAlert
() // Display: "Hello world"

E i componenti?

Per beneficiare di questa semplificazione, il metodo chiamato e il metodo chiamante devono essere ricompilati. Quindi, nel caso di un metodo condiviso tra la base host e un componente, entrambi i progetti devono essere ricompilati.

Ma come si fa con i componenti compilati di cui non si hanno i sorgenti? Non preoccupatevi, potete continuare a usarli come prima. Non è necessario modificare il codice.

Cosa succederà in futuro?

Questa nuova caratteristica vi offre molte idee per i vostri metodi e funzioni. Sentitevi liberi di condividere i vostri suggerimenti sul forum.

Vanessa Talbot
- Product Owner - Vanessa Talbot è entrata a far parte del team di 4D Program nel giugno 2014. In qualità di Product Owner, è incaricata 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. Ha lavorato sulla maggior parte delle nuove funzionalità di multi-threading preemptive e anche su un argomento molto complesso: la nuova architettura per le applicazioni con motore. Vanessa si è laureata presso Telecom Saint-Etienne. Ha iniziato la sua carriera presso il Criminal Research Institute come sviluppatrice per il dipartimento audiovisivo. Ha lavorato anche nei settori dei media e della medicina come esperta di supporto tecnico, produzione e documentazione di nuove funzionalità.