Successivo: Funzioni di internazionalizzazione, Precedente: Funzioni a livello di bit, Su: Funzioni predefinite [Contenuti][Indice]
gawk
prevede due funzioni che permettono di conoscere
il tipo di una variabile.
Questo è necessario per scrivere del codice che visiti ogni elemento di un
vettore di vettori
(vedi Vettori di vettori) e in altri contesti.
isarray(x)
Restituisce il valore ’vero’ se x è un vettore. Altrimenti, restituisce ’falso’.
typeof(x)
Restituisce una delle stringhe seguenti, a seconda del tipo di x:
"array"
x è un vettore.
"regexp"
x è una regexp fortemente tipizzata (vedi Costanti regexp forti).
"number"
x è un numero.
"string"
x è una stringa.
"strnum"
x è un numero che ha avuto origine da un input dell’utente,
come un campo o il risultato di una chiamata a split()
.
(Cioè, x ha l’attributo strnum;
vedi Tipi di variabile.)
"unassigned"
x è una variabile scalare a cui non è ancora stato assegnato un valore. Per esempio:
BEGIN { # crea a[1] ma non gli attribuisce alcun valore a[1] print typeof(a[1]) # unassigned }
"untyped"
x non è stata usata per nulla; può diventare uno scalare o un vettore. Per esempio:
BEGIN { print typeof(x) # x non è mai stato usato --> untyped mk_arr(x) print typeof(x) # x ora è un vettore --> array } function mk_arr(a) { a[1] = 1 }
isarray()
torna utile in due occasioni. La prima è quando
si visita un vettore multidimensionale: si può stabilire se un elemento è
un vettore oppure no. La seconda è all’interno del corpo di una funzione
definita dall’utente (argomento non ancora trattato;
vedi Funzioni definite dall'utente), per determinare se un parametro
è un vettore oppure no.
NOTA: Usare
isarray()
a livello globale per controllare le variabili non ha alcun senso. Si suppone infatti che chi scrive il programma sappia se una variabile è un vettore oppure no. E in effetti, per come funzionagawk
, se si passa una variabile che non sia stata usata in precedenza aisarray()
,gawk
la crea al volo, assegnandole il tipo scalare.
La funzione typeof()
è generale; consente di determinare
se una variabile o un parametro di funzione è uno scalare, un vettore,
o una regexp fortemente tipizzata.
L’uso di isarray()
è deprecato; si dovrebbe usare typeof()
al suo posto. Si dovrebbe sostituire ogni uso esistente di
‘isarray(var)’ nei programmi esistenti con
‘typeof(var) == "array"’.
Successivo: Funzioni di internazionalizzazione, Precedente: Funzioni a livello di bit, Su: Funzioni predefinite [Contenuti][Indice]