¿Debería *siempre* favorecer las variables locales escritas implícitamente en C# 3.0?

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

Pregunta

Reafilador Ciertamente así lo cree, y desde el primer momento le pedirá que convierta

Dooberry dooberry = new Dooberry();

a

var dooberry = new Dooberry();

¿Realmente se considera ese el mejor estilo?

¿Fue útil?

Solución

Por supuesto, es una cuestión de estilo, pero estoy de acuerdo con Dare: Declaraciones de tipo implícitas de C# 3.0:¿Var o no var?.Creo que usar var en lugar de un tipo explícito hace que su código sea menos legible. En el siguiente código:

var result = GetUserID();

¿Qué es el resultado?¿Un int, una cadena, un GUID?Sí, importa, y no, no debería tener que revisar el código para saberlo.Es especialmente molesto en los ejemplos de código.

Jeff escribió una publicación sobre esto, diciendo el favorece var.¡Pero ese tipo está loco!

Veo un patrón para el éxito del desbordamiento de pila:Desenterrar publicaciones antiguas de CodingHorror y (estilo Jeopardy) expresarlas en términos de una pregunta.

Otros consejos

Lo uso sólo cuando es claramente obvio qué es var.

claro para mi:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

no me queda claro:

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

El mejor resumen de la respuesta que he visto a esto es El comentario de Eric Lippert, que esencialmente dice que debes usar el tipo concreto si es importante cuál es el tipo, pero no en caso contrario.Básicamente, la información tipográfica debe reservarse para lugares donde el tipo es importante.

El estándar en mi empresa es usar var en todas partes, a lo que llegamos después leer varias recomendaciones y luego dedicar un tiempo a probarlas para ver si la falta de información tipográfica anotada fue una ayuda o un obstáculo.Sentimos que fue una ayuda.

La mayoría de las recomendaciones a las que la gente se ha vinculado (p. ej.Dare) son recomendaciones hechas por personas que nunca han intentado codificar usando var en lugar del tipo concreto.Esto hace que las recomendaciones sean prácticamente inútiles, porque no hablan de la experiencia, sino que simplemente están extrapolando.

El mejor consejo que puedo darte es que lo pruebes tú mismo y veas qué funciona para ti y tu equipo.

@jongalloway: var no necesariamente hace que su código sea más ilegible.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

El primero es tan legible como el segundo y requiere menos trabajo.

var myvariable = ResultFromMethod();

Aquí tienes razón, var podría hacer que el código sea menos legible.Me gusta var porque si cambio un decimal a doble, no tengo que cambiarlo en muchos lugares (y no digas refactorizar, a veces lo olvido, ¡solo déjame var!)

EDITAR: Solo lee el artículo, estoy de acuerdo.jajaja.

Tengo la sensación de que esta será una de las preguntas más populares a lo largo del tiempo en Stack Overflow.Todo se reduce a preferencias.Lo que creas que es más legible.Prefiero var cuando el tipo está definido en el lado derecho porque es más conciso.Cuando asigno una variable desde una llamada a un método, uso la declaración de tipo explícita.

Hubo una buena discusión sobre este @ Codificación de terror

Personalmente trato de mantener su uso al mínimo, he descubierto que perjudica la legibilidad, especialmente cuando se asigna una variable desde una llamada a un método.

Una de las ventajas de una herramienta como ReSharper es que puedes escribir el código como quieras y luego reformatearlo a algo más fácil de mantener.Tengo R# configurado para reformatear siempre de modo que el tipo real en uso sea visible; sin embargo, cuando escribo código casi siempre escribo 'var'.

Las buenas herramientas le permiten tener lo mejor de ambos mundos.

John.

Sólo tiene sentido cuando no se conoce de antemano el tipo.

El "mejor estilo" es subjetivo y varía según el contexto.

A veces es mucho más fácil usar 'var' en lugar de escribir un nombre de clase muy largo, o si no estás seguro del tipo de retorno de una función determinada.Creo que uso más 'var' cuando juego con Linq o en declaraciones de bucle for.

Otras veces, usar el nombre completo de la clase es más útil ya que documenta el código mejor que 'var'.

Siento que le corresponde al desarrollador tomar la decisión.No hay bala de plata.No hay un "único camino verdadero".

¡Salud!

No no siempre pero me atrevería a decir que la mayor parte del tiempo.Las declaraciones de tipo no son mucho más útiles de lo que lo fue la notación húngara.Todavía tiene el mismo problema de que los tipos están sujetos a cambios y, por mucho que las herramientas de refactorización sean útiles para eso, no es ideal en comparación con no tener que cambiar el lugar donde se especifica un tipo, excepto en un solo lugar, que sigue el No repetirse. principio.

Cualquier declaración de una sola línea donde se pueda especificar el nombre de un tipo tanto para una variable como para su valor definitivamente debe usar var, especialmente cuando es un largo Genérico<OtroGenérico<T,U,V>,Diccionario<X,Y>>>

Hay una muy buen artículo de MSDN sobre este tema y describe algunos casos en los que no se puede utilizar var:

Las siguientes restricciones se aplican a las declaraciones de variables escritas implícitamente:

  • VAR solo se puede usar cuando se declara e inicializa una variable local en la misma declaración;La variable no se puede inicializar a NULL, o a un grupo de métodos o una función anónima.
  • var no se puede utilizar en campos en el ámbito de la clase.
  • Las variables declaradas mediante el uso de VAR no se pueden usar en la expresión de inicialización.En otras palabras, esta expresión es legal:int yo = (yo = 20);Pero esta expresión produce un error de tiempo de compilación:var i = (i = 20);
  • Múltiples variables de tipo implícitamente no se pueden inicializar en la misma declaración.
  • Si un tipo llamado VAR está en alcance, la palabra clave VAR se resolverá con el nombre de ese tipo y no será tratado como parte de una declaración de variable local tipada implícitamente.

Recomendaría consultarlo para comprender todas las implicaciones del uso de var en su código.

Estoy viendo un patrón para el éxito de Stackoverflow:desenterrar viejos mensajes de CodingHorror y (estilo Jeopardy) frases en términos de una pregunta.

¡Me declaro inocente!Pero tienes razón, ésta parecía ser una pequeña pregunta relativamente popular.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top