Barninga Z
a- a+

Gli enumeratori

ENTITA' COMPLESSE 

Gli enumeratori 

Gli enumeratori sono un ulteriore strumento che il C rende disponibile per rappresentare più agevolmente i dati gestiti dai programmi. In particolare essi consentono di descrivere con nomi simbolici gruppi di oggetti ai quali è possibile associare valori numerici interi. 

Come noto, le variabili di un programma possono rappresentare non solo oggetti quantificabili, come un importo valutario, ma anche qualità non numerabili (come un colore o il sesso di un individuo) la cui caratteristica principale è il fatto di essere mutuamente esclusive. Normalmente si tende a gestire tali qualità "inventando" una codifica che permette di assegnare valori di tipo integral ai loro differenti modi di manifestarsi (ad esempio: al colore nero può essere associato il valore zero, al rosso il valore 1, e così via; si può utilizzare il carattere 'M' per "maschile" e 'F' per "femminile, etc.). Spesso si ricorre alle direttive #define, che consentono di associare, mediante la sostituzione di stringhe a livello di preprocessore, un valore numerico ad un nome descrittivo. 

L'uso degli enumeratori può facilitare la stesura dei programmi, lasciando al compilatore il compito di effettuare la codifica dei diversi valori assumibili dalle variabili che gestiscono modalità qualitative, e consentendo al programmatore di definire ed utilizzare nomi simbolici per riferirsi a tali valori. Vediamo un esempio: 

 

enum SEX {
    ignoto,        // beh, non si sa mai...
    maschile,
    femminile
};

La dichiarazione di un enumeratore ricorda da vicino quella di una struttura: anche in questo caso viene definito un template; la parola chiave enum è seguita dal tag, cioè dal nome che si intende dare al modello di enumeratore; vi sono le parentesi graffe aperta e chiusa, quest'ultima seguita dal punto e virgola. La differenza più evidente rispetto alla dichiarazione di un template di struttura consiste nel fatto che laddove in questo compaiono le dichiarazioni dei campi (vere e proprie definizioni di variabili con tanto di indicatore di tipo e punto e virgola), nel template di enum vi è l'elenco dei nomi simbolici corrispondenti alle possibili manifestazioni della qualità che l'enumeratore stesso rappresenta. Detti nomi simbolici sono separati da virgole; la virgola non compare dopo l'ultimo nome elencato. 

Anche la dichiarazione di una variabile di tipo enum ricorda da vicino quella di una variabile struttura: 

enum SEX sesso;
    ....
    sesso = maschile;
    ....
    if(sesso == maschile)
        printf("MASCHIO");
    else
        if(sesso == femminile)
            printf("FEMMINA");
        else
            printf("BOH?");

Il codice riportato chiarisce le modalità di dichiarazione, inizializzazione e, in generale, di utilizzo di una variabile di tipo enum

E' inoltre possibile notare come in C, a differenza di quanto avviene in molti altri linguaggi, l'operatore di assegnamento e quello di confronto per uguaglianza hanno grafia differente, dal momento che quest'ultimo si esprime con il doppio segno di uguale. 

Ovviamente il compilatore, di soppiatto, assegna dei valori ai nomi simbolici elencati nel template dell'enum: per default al primo nome è associato il valore 0, al secondo 1, e così via. E' comunque possibile assegnare valori a piacere, purché integral, ad uno o più nomi simbolici; ai restanti il valore viene assegnato automaticamente dal compilatore, incrementando di uno il valore associato al nome precedente. 

enum SEX {
    ignoto = -1,
    maschile,
    femminile
};

Nell'esempio, al nome ignoto è assegnato esplicitamente valore ­1: il compilatore assegna valore 0 al nome maschile e 1 a femminile. I valori esplicitamente assegnati dal programmatore non devono necessariamente essere consecutivi; la sola condizione da rispettare è che si tratti di valori interi. 

Il vantaggio dell'uso degli enumeratori consiste nella semplicità di stesura e nella migliore leggibilità del programma, che non deve più contenere dichiarazioni di costanti manifeste né utilizzare variabili intere per esprimere modalità qualitative. Inoltre, la limitazione del fabbisogno di costanti manifeste rappresenta di per sé un vantaggio di carattere tecnico, in quanto consente di limitare i rischi connessi al loro utilizzo, in particolare i cosiddetti side effect o effetti collaterali. 

 



Ti potrebbe interessare anche

commenta la notizia

Ci sono 1 commenti