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.