Che cos'è un enum nei linguaggi di programmazione?

Abbreviazione di enumerazione, un tipo di variabile enum può essere trovato in C (ANSI, non nell'originale K&R), C ++ e C #. L'idea è che invece di utilizzare un int per rappresentare un insieme di valori, viene utilizzato un tipo con un insieme limitato di valori.

Ad esempio, se usiamo i colori dell'arcobaleno, che sono

  1. Rosso
  2. arancia
  3. Giallo
  4. verde
  5. Blu
  6. Indaco
  7. Viola

Se gli enum non esistessero, potresti usare a #definire (in C) o const in C ++ / C # per specificare questi valori. Per esempio

Troppi Ints da contare!

Il problema è che ci sono molti più ints che colori. Se il viola ha il valore 7 e il programma assegna un valore di 15 a una variabile, allora è chiaramente un bug ma potrebbe non essere rilevato poiché 15 è un valore valido per un int.

Enums to the Rescue

Un enum è un tipo definito dall'utente costituito da un insieme di costanti denominate chiamate enumeratori. I colori dell'arcobaleno sarebbero mappati in questo modo .:

Ora internamente, il compilatore utilizzerà un int per mantenerli e se non viene fornito alcun valore, il rosso sarà 0, l'arancione sarà 1 ecc..

Qual è il vantaggio di un Enum?

Il punto è che rainbowcolors è un tipo e solo altre variabili dello stesso tipo possono essere assegnate a questo. C è più facile (cioè meno tipizzato), ma C ++ e C # non consentono l'assegnazione a meno che non la forzate utilizzando un cast.

Non sei bloccato con questi valori generati dal compilatore, puoi assegnargli la tua costante intera come mostrato qui.

Avere blu e indaco con lo stesso valore non è un errore in quanto gli enumeratori potrebbero includere sinonimi come scarlatto e cremisi.

Differenze linguistiche

In C, la dichiarazione della variabile deve essere preceduta dalla parola enum come in

In C ++, tuttavia, non è necessario come rainbowcolors è un tipo distinto che non necessita del prefisso del tipo enum.

In C # i valori sono accessibili dal nome del tipo come in

Qual è il punto di enum?

L'uso di enum aumenta il livello di astrazione e consente al programmatore di pensare a cosa significano i valori piuttosto che preoccuparsi di come sono memorizzati e accessibili. Ciò riduce il verificarsi di bug.