Le funzioni personalizzate di 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.

[cma-questions skipanonymously=1 tag="filemaker,funzioni-personalizzate,variabili" relatedpostid="325" limit=3]

Daniele Raybaudi

Cerca
Prendi la corsia preferenziale e risolvi i tuoi problemi di sviluppo FileMaker!

Risorse gratuite

Guru Corner

Altri articoli di Daniele Raybaudi

Ultimi articoli

Intervista a Giuliano Iacobelli

Non poteva che iniziare da Giuliano Iacobelli, l'italianissimo head of product management di Claris, il viaggio di Claris People, la serie di interviste con cui

Leggi...