Successivo: , Precedente: , Su: Funzioni predefinite   [Contenuti][Indice]


9.1.7 Funzioni per conoscere il tipo di una variabile

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 funziona gawk, se si passa una variabile che non sia stata usata in precedenza a isarray(), 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: , Precedente: , Su: Funzioni predefinite   [Contenuti][Indice]