2011-09-02 23 views
7

A veces me encuentro pensando qué palabra usar cuando se refiere a IEnumerable<Foo>. No creo que vea un nombre consistente al leer.¿Cómo se llama IEnumerable <Foo>?

IEnumerable<Foo>: Es un nombre de tipo. No es útil cuando se piensa o se usa en una oración.

Colección: Es válido pero no se usa en todas partes. Aunque tenemos el espacio de nombres System.Collections.

Secuencia: Es válida también y probablemente la defina mejor.

enumerador o iterador: Destacan la operación, rara vez se utiliza.

¿Cuál sería la más adecuada? ¿Qué lees en tu código?

+0

Me refiero sobre todo como una ** colección ** :) – Samich

+0

marcado CW por solicitud de OP –

+0

Normalmente me refiero a un Enumerable de Foo :-) Así que una secuencia . – xanatos

Respuesta

7

Un IEnumerable<Foo> es no un iterador/empadronador - que es un concepto separado para el dispositivo que itera ella.

A colección generalmente se refiere a un dispositivo específico que permite operaciones como agregar/eliminar; eso no aplica aquí, pero el término no es irracional.

Personalmente tiendo a usar "secuencia" en la discusión, pero no usarlo para nombrar las cosas en el código - Yo sólo haría uso de lo la secuencia representa, es decir, "órdenes", "uniqueUsers" , etc. - o en el caso de métodos genéricos, "artículos", "valores", etc.

+0

Véase también [Pregunta sobre IEnumerable y IEnumerator] (http://stackoverflow.com/questions/4548464/question-regarding-ienumerable-and-ienumerator/4550191#4550191). – Brian

6

Definitivamente me inclino hacia secuencia. En mi opinión, una colección es finita, y una IEnumerable<Foo> puede muy bien representar una secuencia de valores que se producen sobre la marcha, por lo que puede representar una secuencia infinita de valores.

+0

La secuencia no está mal, pero no todas las secuencias implementan ninguna forma de IEnumerable. La "secuencia reutilizable" sería mi descripción preferida en inglés; algunas secuencias reutilizables no implementan implementan IEnumerable, pero como la mayoría de las secuencias que no implementan IEnumerable no son reutilizables, creo que "reutilizable" es un adjetivo útil. – supercat

2

Hay un precedente para referirse a él por escrito como "un IEnumerable de Foo". Por ejemplo, this MSDN page se refiere a "un IEnumerable de XElement".

Verbally Yo diría "An IEnumerable of Foo" o "un Enumerable of Foo".

1

Por el momento, la manera más clara y no ambigua para describir una variable, parámetro o campo de tipo "IEnumerable <Foo>" es llamarlo un "IEnumerable <foo>", "IEnumerable (Of foo)", o "IEnumerable of foo". Siendo un programador de VB, prefiero la sintaxis intermedia, especialmente porque no usa signos de puntuación que puedan confundirse con el marcado HTML; al hablar, la última forma sería la pronunciación más natural (con la "I" inicial representando su propia sílaba) excepto en los casos que involucran genéricos anidados, cuando pueden requerirse otras señales de pronunciación para indicar el anidamiento preciso.

Algunas de las clases que implementan interfaces genéricas o no genéricas (*) IEnumerable son colecciones, pero otras no. Algunos son iteradores; algunos no Los términos "colección" e "iterador" no son realmente adecuados a menos que uno sepa que un IEnumerable particular será de hecho una colección o un iterador.El término "iterador" tiene un problema adicional, compartido por el término "secuencia": no todos los iteradores o secuencias implementan IEnumerable; algunos implementan IEnumerator y algunos implementan un método GetEnumerator pero no implementan IEnumerable (por ejemplo, porque desean permitir "foreach" pero no desean prometer todos los comportamientos implicados por IEnumerable). Si uno desea evitar la jerga, el término "secuencia reutilizable" puede ser bueno. No es inequívoco, porque podría referirse a las clases que tienen un método GetEnumerator pero no implementan IEnumerable, o posiblemente a los objetos IEnumerator cuyo método Restablecer realmente restablece la enumeración, pero excluye los iteradores de uso único.

(*) El término "IEnumerable" de aquí en adelante se referirá a IEnumerable e IEnumerable <T> indistintamente. Del mismo modo, "IEnumerator".

0

Úselo en una frase (código).

IEnumerable<Foo> myFoos = GetFoos(); 
    //internal vocalization: get some Foos, assign them to myFoos 

Sospecho que la mayoría de los programadores no vocalizan internamente el tipo en una declaración/asignación variable.

public IEnumerable<Foo> ProcessFoos(IEnumerable<Foo> source) 
    //internal vocalization: The method requires some foos and returns some foos. 

Supongo que uso "algo" como mi vocalización interna. Probablemente, cualquier palabra plural podría funcionar. Lote, porción, montón, rebaño, plétora, etc.

Cuestiones relacionadas