¿Qué significa 'enumerable'?

8

Mi experiencia en matemáticas es muy pobre (es decir, la última clase de matemáticas relevante tomada fue Trigonometría de secundaria hace dos años, otra historia para otro momento). Estoy leyendo 'Javascript: la guía definitiva' y es un término que se usa de forma repetitiva y acabo de ejecutarlo. Pero he llegado a un capítulo (Capítulo 6 - Objetos) donde mi falta de comprensión del término y su aplicación en la programación / POO está empezando a ser perjudicial para el proceso de aprendizaje. Los diccionarios en línea no están ayudando, entonces ¿alguien tiene una definición y / o ejemplo más explicable para mostrar?

gr33kbo1
fuente
¿Qué diccionarios no ayudaron? los tres primeros de google.co.uk/search?q=define+enumerable parecen definirlo bien
jk.
En el contexto de JavaScript, consulte " Enumerabilidad y propiedad de las propiedades " en MDN
TehShrike

Respuestas:

15

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 monthsólo puede tomar los valores januarya 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 redde una colorenumeración no se puede asignar a una monthenumeració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. Apuede venir antesB, pero cuando insertamos C, ahora Bsucede antes Aporque se llevó a cabo una reorganización interna.

Kaz
fuente
11

Acabo de sacar mi copia de JavaScript: la guía definitiva , pasé al capítulo 6 y leí rápidamente la sección 6.5 Propiedades de enumeración . Ahora, debo agregar que tampoco soy una persona matemática particularmente fuerte, así que espero que esto tenga sentido:

Específicamente, "enumerable" significa que hay algún tipo de esquema de ordenamiento que tiene lugar, de modo que puede abordar rápida / fácilmente los elementos en ese conjunto / secuencia / colección (o, en esa sección de JavaScript: la guía definitiva , el objeto) .

Para aplicarlo a lo que está leyendo en el libro, cuando el autor dice que las propiedades con las que extiende una clase son enumerables , simplemente dice que cualquier propiedad que agregue a un objeto (no las que se heredan) puede iterarse terminado. Entonces, si creas un objeto objasí:

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

... cuando iteras sobre él con el siguiente bucle (estoy usando nombres de variables descriptivas aquí):

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

... verá tres elementos registrados en su consola JS:

  • una
  • si
  • C

Esto le está diciendo que las propiedades de objeto obj, se enumeran las teclas a, b, y c.

nesv
fuente
1
Entonces, en ese ejemplo, ¿ a, b, cson propiedades enumerables? Y, alternativamente, una propiedad no enumerable es una propiedad que no está enumerada por claves.
gr33kbo1
2
Exactamente. En el caso de JavaScript, las propiedades de un objeto que no se heredan del objeto base son enumerables . Si ayuda, quizás intente pensar en una propiedad enumerable como una propiedad cuyo descriptor de acceso puede recibir, al iterar sobre su objeto padre con un for-inbucle.
nesv
9

Un enumerable es un objeto que puede enumerarse. "Enumerado" significa contar a los miembros de un conjunto / colección / categoría uno por uno (generalmente en orden, generalmente por nombre).

Un enumerable es un objeto que puede atravesar una serie de otros objetos uno por uno.

Telastyn
fuente