2010-12-02 21 views
48

¿Cómo nombramos una variable de diccionario?Convención de nomenclatura para un diccionario de C#

Digamos que en mi método tengo Dictionary<string, List<string>> dictionary;, donde las claves del dictionary son nombres de países y los valores son listas de nombres de provincia/estado. ¿Cómo debo cambiar el nombre a dictionary?

Sé que podemos crear una clase Country para este ejemplo. Pero por favor no menciones esta alternativa porque estoy pensando en una buena convención de nombres aquí.

+0

Puede pensar en un diccionario como una función de mapeo o puede pensar en ello más específicamente como una función de hashing/búsqueda/índice. El mapeo es más general. Considera una función matemática que asigna Celsius a Fareheit, que podría llamarse ConvertCelsiusToFarenheit. "A" enfatiza que el espacio/conjunto de entrada es el foco. Y-By-X captura mejor que un diccionario es un tipo específico de mapeo que usa hash basado en conjunto. "Por" enfatiza que el espacio/conjunto de salida es el foco. Una clave no tiene valor a menos que desbloquee algo. Solo mi opinión, pero espero que ayude a dar una idea. – VoteCoffee

+0

Otra nota rápida: desea capturar para qué sirve, no qué hace: un diccionario real es para buscar definiciones por palabras. Es cierto que asigna algunas palabras a sus definiciones, pero esto tampoco captura el intento. – VoteCoffee

Respuesta

58
ProvincesByCountry 
+0

¿Hay alguna referencia que indique que ValueByKey es el estándar para nombrar diccionarios en C#? Parece que hay muchas convenciones igualmente buenas para nombrar diccionarios. ¿La comunidad C# acaba de establecerse en ValueByKey sin ninguna referencia canónica (tal vez siguiendo el ejemplo de Microsoft)? –

+1

No es una convención establecida, hasta donde yo sé. Simplemente parecía una solución buena y concisa para el caso en cuestión. – Heinzi

+0

Es extraño ver que la respuesta de Lou Franco tiene 5 votos donde la tuya tiene 29. Parece que ambos escogieron soluciones "buenas y concisas", así que asumí que la suya tenía que ser más correcta de alguna manera. Supongo que tu respuesta obtuvo el impulso (o tal vez mejor abordado el hecho de que "Provincias" es plural). –

14

utilizo sobre todo uno de estos:

  • CountryToStatesDictionary
  • CountryToStatesMap
  • CountryToStatesMapping
+0

como el diccionario FrenchToEnglish. –

2

provincias, provinceMap, provinceDictionary

Todos vienen a la mente. Me gusta ProvinceMapa mi yo. Si es un campo miembro, agregaría un prefijo "m_", como en "m_provinceMap".

+1

Ok. pero esto no refleja las llaves. – Shuo

+0

Estoy bien con eso. Debería ser bastante implícito en este caso. Buscaría nombres más cortos, a menos que exista una razón por la cual las claves podrían ser ambiguas. Si tuviera varios mapas que contengan provincias, entonces la diferenciación de las claves sería importante. En su ejemplo, creo que no hay ambigüedad. –

+1

Hmm ... Estoy bien con provinceMap, provinceDictionary. Pero las provincias parece ser un nombre de una lista . – Shuo

7

me gusta XtoYMap o YFromX.

5

Nombrar siempre es contextual. Entonces, en este caso específico, es apropiado algún nombre que especifique el mapeo de país a estado.

si esto era sólo un dispositivo para un bucle dentro de un contexto más amplio y luego se descarta, que normalmente sólo tiene que ir con un tipo corto var temp como ...

var dict = GetCountryStateMapping(); 
foreach(var item in dict) 
{ 
    //Something.... 
} 
+10

Me recuerda a una broma de TI ... "Solo hay dos problemas difíciles en informática, nombrar cosas, invalidación de caché y desactivado por 1 error". –

+0

OK. Pero, ¿y si quiero que esto se use como una propiedad? – Shuo

+2

Ah, entonces en ese caso tiene un contexto y un alcance, la clase principal (junto con los contenidos) y su duración. En ese caso, nombrar es mucho más fácil. Como dije, nombrar siempre es contextual. En ese caso, RegionByCountry o StateByCountry o ProvinceByCountry, etc. sería la OMI más apropiada. –

3

ProvincesByCountry no es lo suficientemente explícita, ya que suena como mapear países a provincias de uno a uno. Al acceder a ProvincesByCountry ["Alemania"] Me esperaba asumir que un valor es un objeto en lugar de una lista de objetos.

Mi patrón personal es similar:

[Plural of a noun describing the value]By[Singular of a noun describing the key] 

Sin embargo, si un sustantivo que describe el valor es plural, por su naturaleza, entonces yo uso el postfix matrices, o listas, al igual que en Inglés se puede 't realmente "pluralizar" un plural. Yo personalmente siempre se adhieren a las matrices , independientemente de la aplicación real de IEnumerable o IEnumerable < T> que estoy usando, se que Lista, o matriz o lo que sea.

En su caso se convierte en:

ProvinceArraysByCountry 

Explica lo que es con precisión científica.

Aplico esta regla recursivamente si hay diccionarios como valores. El orden de acceso va en reversa al orden de las palabras en el nombre.Imagine que agrega planetas:

ProvinceArraysByCountryByPlanet["Earth"]["Germany"][0] = "Bavaria" 
ProvinceArraysByCountryByPlanet["Earth"]["Germany"][1] = "Rhineland-Palatinate" 

Y finalmente, el último pequeño golpe aquí. Si dicho diccionario mapea las propiedades del objeto y los objetos mismos, entonces dejo fuera la palabra que describe el objeto en la sección clave. Esto es lo que quiero decir:

NodesByIndex[node.Index] = node; // - Do 
NodesByNodeIndex[node.Index] = node; // - Don't 

que utilizan este patrón incondicionalmente lo cual es bueno, ya que deja absolutamente ningún espacio para la conjetura. Con es que genera nombres bastante largos a veces. Pero no tengo idea de cómo tener siempre nombres explícitos, pero siempre cortos. Siempre tienes que comprometerte. Y es, por supuesto, una cuestión de gusto.

Este patrón no funciona (o al menos le rompería el cerebro) cuando las claves también son diccionarios o cuando tiene una lista de diccionarios de listas de diccionarios o alguna otra cosa loca y exótica. Pero no recuerdo haber tenido tantos niveles de anidación, así que estoy contento con eso.

+0

finalización de código y monitores anchos han sido de gran ayuda para los nombres de variable significativos –

+0

Como he visto en el código fuente de Microsoft, ellos usan el postfijo 'Colección'. Así que diría 'ProvinceCollectionsByCountry' o quizás un nombre más especializado:' ProvinceCollectionsByCountryName'. – Gabor

Cuestiones relacionadas