Matematicamente, numerosos meios "podem ser colocados em uma correspondência individual com os números naturais". A maioria das representações em computação é enumerável porque são feitas de cadeias de bits, e cadeias de bits podem ser usadas para indicar números no sistema binário.
Algumas representações de dados não são consideradas enumeráveis, no entanto. Por exemplo, um número de ponto flutuante é feito de bits, mas trabalhamos com ele como uma aproximação a um número real. No nível binário, podemos "contar" através de números consecutivos de ponto flutuante, mas geralmente isso não é relevante em aplicativos numéricos.
Em algumas outras situações, a enumeração é possível, mas não há acordo sobre uma enumeração. Por exemplo, todos os objetos em sua imagem de tempo de execução constituem um conjunto finito e podem ser enumerados. O coletor de lixo faz isso quando percorre os objetos ativos. Mas o aplicativo não enumera o conjunto de todos os objetos dessa maneira sem considerar os limites de tipo ou módulo; enumera objetos menores que são do mesmo tipo ou relacionados.
Normalmente, quando uma enumeração existe formalmente, há acordo de todas as partes. Aqui está um conjunto de valores. Este é o primeiro. Esse é o seu sucessor, e assim por diante.
Em algumas linguagens de programação, existem tipos enumerados: alguma maneira disciplinada de definir constantes simbólicas nomeadas que são mapeadas pelo compilador para valores inteiros exclusivos. Se esses tipos forem fortemente digitados, essas constantes poderão ser armazenadas apenas em variáveis do tipo correspondente, chamadas de tipo enumerado . Por exemplo, uma enumeração definida pelo utilizador do tipo month
só pode assumir os valores january
através de december
. Eles são reduzidos aos valores de 0 a 11 e podem permitir aritmética, como a successor(january)
produção february
, ou a possibilidade de usar a enumeração como um índice de matriz: definindo uma matriz em days[january..december]
que days[january]
, digamos, 31. A finalidade de um tipo enumerado, portanto, deve servir como um subconjunto dos números naturais, por outros nomes que são distintos e fornecem clareza de significado (nomes são usados em vez de constantes numéricas) e verificação de tipo: a cor red
de uma color
enumeração não pode ser atribuída a uma month
enumeração de tipo .
O verbo enumerartambém é usado para denotar o conceito de consultar uma API para recuperar uma lista de objetos, geralmente em etapas: enumerar as interfaces de rede, enumerar os arquivos em um diretório e assim por diante. Sempre que um objeto está em uma correspondência 1: N com outros objetos, ele é suscetível de suportar uma API de enumeração que nos permite percorrer esses objetos irmãos ou recuperá-los como uma lista. A terminologia é um pouco obscura; por exemplo, em alguns casos, mesmo que os elementos não estejam em uma ordem específica, mas todos possam ser visitados sem repetição, ainda é uma enumeração. Algumas estruturas de dados de conjuntos dinâmicos, como tabelas de hash, não fornecem uma ordem específica e podem se reorganizar à medida que aumentam e diminuem, de modo que a ordem real varia quando inserções e exclusões são executadas. A
pode vir antesB
, mas quando inserimos C
, agora B
acontece antes A
porque ocorreu uma reorganização interna.