Le funzioni personalizzate in FileMaker: come usare le variabili

Dopo aver analizzato le funzioni ricorsive normali e in coda, in questo articolo andremo a vedere come si possono usare le variabili all'interno di funzioni personalizzate.

La funzione Let ( )

La maggior parte delle funzioni personalizzate utilizzano, per semplicità di lettura, le variabili definite dalla funzione Let ( ).

Per esempio:

// Sec CF NON ricorsiva: restituisce un elenco puntato con i secondi dell'Ora Corrente
Let (
t = Get ( CurrentTime ) ;
"1. " & Seconds ( t )
)

In questo caso possiamo dire che t è una variabile di Let ( ).
Possiamo anche verificare, ad esempio tramite il visualizzatore dati, che essa si annulla alla fine del calcolo e non ne rimane più traccia.

Le variabili locali

C'è però un secondo tipo di variabile molto più interessante: la variabile locale preceduta dal singolo simbolo del dollaro $. Questa particolare variabile può essere usata efficacemente come contatore in quanto NON si annulla da sola, come nel caso precedente o come farebbe se definita all'interno di uno script.

Infatti, se scrivessimo:

// Sec CF NON ricorsiva: restituisce un elenco puntato con i secondi dell'Ora Corrente
Let ([
t = Get ( CurrentTime ) ;
$i = $i + 1
];
$i & ". " & Seconds ( t )
)

anche un'ora dopo, sempre nella stessa sessione di uso del DB, $i esisterebbe ancora.
Nasce quindi eventualmente il problema di doverla azzerare DOPO aver ottenuto il risultato voluto, cosa molto facile con qualcosa tipo:

// Sec CF NON ricorsiva: restituisce un elenco puntato con i secondi dell'Ora Corrente
Let ([
t = Get ( CurrentTime ) ;
$i = $i + 1
];
$i & ". " & Seconds ( t )
& Let ( $i = "" ; "" ) // azzera la variabile $i
)

I tre esempi precedenti non hanno alcun uso pratico ma sono serviti a spiegare la prossima funzione. Vogliamo infatti sfruttare la possibile memorizzazione di $i e lo faremo creando una funzione ricorsiva che scrive 3.000 valori di t e poi esce.

// Sec CF ricorsiva: restituisce un elenco puntato con 3000 secondi dell' Ora Corrente
Let ([
t = Get ( CurrentTime ) ;
$i = $i + 1
];
$i & ". " & Seconds ( t ) & If ( $i < 3000 ; ¶ & Sec ; Let ( $i = "" ; "" ) )
)

Anche questa funzione è poco utile, però ci ha permesso di capire che:

  • Le funzioni personalizzate NON hanno obbligatoriamente dei parametri (questa non ne ha nessuno);
  • La velocità del motore di calcolo di FileMaker è apprezzabile (poco più di un secondo per scrivere una lista di 3000 valori);
  • Le variabili locali ($var) DEVONO per forza essere azzerate alla fine del calcolo.

Ma c'è ancora un punto che va esaminato:

  • Bisogna evitare che il nome della variabile sia troppo semplice, quindi magari già usato per un altro calcolo, e che la variabile non sia stata azzerata.

Ad esempio, invece di $i, potremmo usare con lo stesso risultato $cfSec (variabile utilizzata per la Custom Function Sec) o qualsiasi altro nome complesso.

La funzione Lista ( )

La suddetta funzione può anche essere scritta diversamente utilizzando la funzione Lista ( ):

// Sec CF ricorsiva: restituisce un elenco puntato con 3000 secondi dell'Ora Corrente
Let ([
t = Get ( CurrentTime ) ;
$cfSec = $cfSec + 1;
row = $cfSec & ". " & Seconds ( t )
];
Case (
$cfSec ≤ 3000 ; List ( row ; Sec ) ;
Let ( $cfSec = "" ; "" )
)
)

Ricordatevi di utilizzare tutti questi esempi in campi calcolati NON memorizzati perché, non dipendendo le funzioni da alcun parametro, verrebbero calcolati solo una volta.

Conclusione

Dopo aver visto nello scorso articolo che le funzioni personalizzate possono essere ricorsive e in coda, abbiamo quindi scoperto come è possibile inserire delle variabili.

Al prossimo articolo della rubrica SuperSizeMe, e non dimenticate di lasciare un commento.

3 Commenti

  1. Ottima spiegazione, adesso ho il concetto un pò più chiaro. Il problema è andare a sostituire in tutte le formule i riferimenti ai campi calcolati creati ad hoc 🙁

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here