Matematicamente, i mezzi enumerabili "possono essere inseriti in una corrispondenza uno a uno con i numeri naturali". La maggior parte delle rappresentazioni nel calcolo sono enumerabili perché sono costituite da stringhe di bit e possono essere prese stringhe di bit per indicare i numeri nel sistema binario.
Tuttavia alcune rappresentazioni di dati non sono considerate enumerabili. Ad esempio, un numero in virgola mobile è composto da bit, ma lavoriamo con esso come un'approssimazione di un numero reale. A livello binario possiamo "contare" attraverso numeri consecutivi in virgola mobile, ma di solito questo non è rilevante nelle applicazioni numeriche.
In alcune altre situazioni, l'enumerazione è possibile, ma non c'è accordo sull'enumerazione an . Ad esempio, tutti gli oggetti nella tua immagine runtime costituiscono un insieme finito e possono essere enumerati. Il garbage collector lo fa quando cammina attraverso gli oggetti live. Ma l'applicazione non enumera l'insieme di tutti gli oggetti in quel modo senza riguardo per i limiti del tipo o del modulo; enumera oggetti più piccoli dello stesso tipo o correlati.
Di solito, dove esiste un'enumerazione formale, c'è un accordo tra tutte le parti. Ecco un insieme di valori. Questo è il primo Quello è il suo successore, e così via.
In alcuni linguaggi di programmazione esistono tipi enumerati: un modo disciplinato di definire costanti simboliche denominate che sono mappate dal compilatore a valori interi univoci. Se tali tipi sono strongmente tipizzati, queste costanti possono essere memorizzate solo in variabili del loro tipo corrispondente, chiamato un tipo enumerato . Ad esempio, un'enumerazione definita dall'utente di tipo month
può assumere solo i valori da january
a december
. Questi sono ridotti ai valori da 0 a 11 e possono consentire l'aritmetica, come successor(january)
che produce february
, o la possibilità di usare l'enumerazione come indice di matrice: definire un array days[january..december]
dove days[january]
è, per esempio , 31. Lo scopo di un tipo enumerato , quindi, è di servire come un sottoinsieme dei numeri naturali, con altri nomi che sono distinti e forniscono chiarezza di significato (i nomi sono usati al posto delle costanti numeriche) e verifica del tipo: il colore red
da un'enumerazione color
non può essere assegnato a un'enumerazione del tipo month
.
Il verbo enumerate viene anche usato per indicare il concetto di interrogare un'API per recuperare un elenco di oggetti, solitamente in modo graduale: enumerare le interfacce di rete, enumerare i file in una directory, e così sopra. Ogni volta che un oggetto si trova in una corrispondenza 1: N con altri oggetti, è suscettibile di supportare un'API di enumerazione che ci consente di attraversare tali oggetti o di recuperarli come elenco. La terminologia è un po 'torbida; per esempio in alcuni casi, anche se gli elementi non sono in un ordine particolare, ma possono essere tutti visitati senza ripetizione, è ancora un'enumerazione. Alcune strutture di dati del set dinamico come le tabelle hash non forniscono un ordine particolare e possono riorganizzarsi man mano che vengono ingrandite e ridotte, in modo che l'ordine effettivo vari quando vengono eseguiti gli inserimenti e le delezioni. A
può arrivare prima di B
, ma quando inseriamo C
, ora B
arriva prima di A
perché si è verificata una riorganizzazione interna.