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 la sezione 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 la sezione Costanti regexp fortemente tipizzate).
"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 la sezione Tipo stringa rispetto a tipo numero.)
"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]) # non assegnato }
"untyped"
x non è stata usata per nulla; può diventare uno scalare o un vettore. È anche possibile che il tipo sia differente, in differenti esecuzioni del medesimo programma! Per esempio:
BEGIN { print "all'inizio, typeof(v) = ", typeof(v) if ("FOO" in ENVIRON) make_scalar(v) else make_array(v) print "typeof(v) =", typeof(v) } function make_scalar(p, l) { l = p } function make_array(p) { p[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 la sezione Funzioni definite dall’utente), per determinare se un parametro
è un vettore oppure no.
NOTA: Anche se si può usare
isarray()
a livello globale per controllare le variabili il farlo non ha alcun senso. Si suppone infatti che chi scrive il programma sappia se una variabile è un vettore oppure no.
La funzione typeof()
è generale; consente di determinare
se una variabile o un parametro di funzione è uno scalare, (numero,
stringa o regexp fortemente tipizzata), oppure un vettore.
Normalmente, se si passa una variabile che non è stata mai usata
a una funzione predefinita, la variabile stessa viene creata come
variabile scalare di tipo non ancora assegnato (unassigned).
Tuttavia, se si chiama isarray()
e typeof()
queste
funzioni non cambiano gli argomenti che vengono passati loro da
non ancora tipizzati (untyped) a non ancora assegnati (unassigned).
Successivo: Funzioni di internazionalizzazione, Precedente: Funzioni a livello di bit, Su: Funzioni predefinite [Contenuti][Indice]