Matemáticamente, enumerable significa "puede colocarse en una correspondencia uno a uno con los números naturales". La mayoría de las representaciones en computación son enumerables porque están hechas de cadenas de bits y se pueden tomar cadenas de bits para denotar números en el sistema binario.
Sin embargo, algunas representaciones de datos no se consideran enumerables. Por ejemplo, un número de coma flotante está hecho de bits, pero trabajamos con él como una aproximación a un número real. En el nivel binario podemos "contar" a través de números consecutivos de coma flotante, pero generalmente esto no es relevante en aplicaciones numéricas.
En algunas otras situaciones, la enumeración es posible, pero no hay acuerdo sobre una enumeración. Por ejemplo, todos los objetos en su imagen en tiempo de ejecución constituyen un conjunto finito y se pueden enumerar. El recolector de basura hace eso cuando camina a través de los objetos vivos. Pero la aplicación no enumera el conjunto de todos los objetos de esa manera sin tener en cuenta los límites de tipo o módulo; enumera los objetos más pequeños del mismo tipo o relacionados.
Por lo general, cuando existe una enumeración formal, existe un acuerdo de todas las partes. Aquí hay un conjunto de valores. Este es el primero. Ese es su sucesor, y así sucesivamente.
En algunos lenguajes de programación, existen tipos enumerados: alguna forma disciplinada de definir constantes simbólicas con nombre que el compilador asigna a valores enteros únicos. Si dichos tipos están fuertemente tipados, entonces estas constantes solo pueden almacenarse en variables de su tipo correspondiente, denominado tipo enumerado . Por ejemplo, una enumeración definida por el usuario de tipo month
sólo puede tomar los valores january
a través de december
. Estos se reducen a los valores del 0 al 11, y pueden permitir la aritmética, como successor(january)
producir february
, o la posibilidad de usar la enumeración como un índice de matriz: definir una matriz days[january..december]
donde days[january]
está, digamos, 31. El propósito de un tipo enumerado, por lo tanto, es servir como un subconjunto de los números naturales, por otros nombres que son distintos y proporcionan claridad de significado (se usan nombres en lugar de constantes numéricas) y verificación de tipos: el color red
de una color
enumeración no se puede asignar a una month
enumeración de tipos .
El verbo enumerartambién se usa para denotar el concepto de consultar una API para recuperar una lista de objetos, generalmente de manera gradual: enumerar las interfaces de red, enumerar los archivos en un directorio, etc. Siempre que un objeto se encuentre en una correspondencia 1: N con otros objetos, es susceptible de admitir una API de enumeración que nos permita recorrer esos objetos hermanos o recuperarlos como una lista. La terminología es un poco turbia; por ejemplo, en algunos casos, incluso si los elementos no están en un orden particular, pero todos pueden ser visitados sin repetición, sigue siendo una enumeración. Algunas estructuras de datos de conjuntos dinámicos, como las tablas hash, no proporcionan un orden particular y pueden reorganizarse a medida que crecen y se reducen, de modo que el orden real varía cuando se realizan inserciones y eliminaciones. A
puede venir antesB
, pero cuando insertamos C
, ahora B
sucede antes A
porque se llevó a cabo una reorganización interna.