O que significa 'enumerável'?

8

Minha formação em matemática é muito pobre (ou seja, a última aula relevante de matemática foi na trigonometria do ensino médio, dois anos atrás - outra história para outra época). Estou lendo 'Javascript: O Guia Definitivo' e é um termo que está sendo usado repetidamente e meio que o utilizei. Mas cheguei a um capítulo (Capítulo 6 - Objetos) em que minha falta de compreensão do termo e sua aplicação na programação / POO está começando a se tornar prejudicial ao processo de aprendizagem. Os dicionários on-line não estão ajudando, então alguém tem uma definição e / ou exemplo mais explicável para mostrar?

gr33kbo1
fonte
quais dicionários não ajudaram? os três primeiros de google.co.uk/search?q=define+enumerable parecem defini-lo perfeitamente
jk.
No contexto do JavaScript, consulte " Enumerabilidade e propriedade de propriedades " no MDN
TehShrike

Respostas:

15

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 monthsó pode assumir os valores januaryatravé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 redde uma colorenumeração não pode ser atribuída a uma monthenumeraçã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. Apode vir antesB, mas quando inserimos C, agora Bacontece antes Aporque ocorreu uma reorganização interna.

Kaz
fonte
11

Acabei de pegar minha cópia do JavaScript: The Definitive Guide , passei para o capítulo 6 e li rapidamente a seção 6.5 Enumerando propriedades . Agora, devo acrescentar que também não sou uma pessoa de matemática particularmente forte, por isso espero que isso faça sentido:

Especificamente, "enumerável" significa que existe algum tipo de esquema de pedido, para que você possa abordar rápida e facilmente os itens desse conjunto / sequência / coleção (ou, nessa seção do JavaScript: O Guia Definitivo , o objeto) .

Para aplicá-lo ao que você está lendo no livro, quando o autor diz que as propriedades com as quais você estende uma classe são enumeráveis , ele está apenas dizendo que qualquer propriedade que você adicionar a um objeto (não aquelas que são herdadas) pode ser iterada sobre. Portanto, se você criar um objeto objassim:

var obj = {a: 1, b: 2, c: 3};

... quando você itera sobre ele com o seguinte loop (estou usando nomes descritivos de variáveis ​​aqui):

for (prop in obj) {
    console.log(prop);
}

... você verá três itens registrados no seu console JS:

  • uma
  • b
  • c

Este está lhe dizendo que as propriedades no objeto obj, são enumerados pelas teclas a, b, e c.

nesv
fonte
1
Então, nesse exemplo, a, b, cexistem propriedades enumeráveis? E, alternativamente, uma propriedade inumerável é uma propriedade que não é enumerada por chaves?
Gr33kbo1 28/05
2
Exatamente. No caso do JavaScript, todas as propriedades de um objeto que não são herdadas do objeto base são enumeráveis . Se ajudar, talvez tente pensar em uma propriedade enumerável como uma propriedade cujo acessador você pode receber ao iterar sobre seu objeto pai com um for-inloop.
Nesv 28/05
9

Um enumerável é um objeto que pode ser enumerado. "Enumerado" significa contar os membros de um conjunto / coleção / categoria, um por um (geralmente em ordem, geralmente por nome).

Um enumerável é um objeto que pode percorrer uma série de outros objetos, um por um.

Telastyn
fonte