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 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: , Precedente: , Su: Funzioni predefinite   [Contenuti][Indice]