2008-08-19 13 views

Respuesta

35

Por supuesto, es una cuestión de estilo, pero estoy de acuerdo con Dare: C# 3.0 Implicit Type Declarations: To var or not to var?. Creo que el uso de var en lugar de un tipo explícito hace que su código sea menos readable.In el siguiente código:

var result = GetUserID(); 

¿Cuál es resultado? Un int, una cadena, un GUID? Sí, importa, y no, no debería tener que buscar el código para saberlo. Es especialmente molesto en las muestras de código.

Jeff escribió una publicación al respecto, que dice he favors var. ¡Pero ese tipo está loco!

Estoy viendo un patrón para el éxito de stackoverflow: desenterrar las antiguas publicaciones de CodingHorror y (estilo Jeopardy) expresarlas en términos de una pregunta.

+8

¿Por qué no se corrige el nombre de la variable en lugar de quejarse sobre var? var userID = GetUserID(); No es realmente muy importante si el ID de usuario es cadena o int, es algo que identifica al usuario y debe ser aceptado por las funciones relevantes. –

+1

Porque una identidad puede ser muchas cosas, int, string, guid, object, etc ... –

2

Tengo la sensación de que esta será una de las preguntas más frecuentes realizadas con el paso del tiempo en Stack Overflow. Todo se reduce a la preferencia. Lo que sea que pienses es más legible. Prefiero var cuando el tipo se define en el lado derecho porque es más escueto. Cuando estoy asignando una variable desde una llamada a método, uso la declaración de tipo explícita.

0

"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á seguro del tipo de devolución de una función determinada. Encuentro que utilizo 'var' más cuando hago borrón y cuenta con Linq, o en declaraciones de bucle.

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

Creo que depende del desarrollador tomar la decisión. No hay bala de plata. No "una sola manera verdadera".

¡Salud!

0

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

Cualquier declaración de una sola línea donde el nombre de un tipo se puede especificar tanto una variable y su valor se debe utilizar definitivamente var, sobre todo cuando se trata de una larga Genérico < OtherGeneric < T, U, V>, diccionario < X, Y >> >

2

Había una buena discusión sobre este @Coding Horror

Personalmente trato de mantener su uso al mínimo, he encontrado que duele legibilidad especialmente cuando se asigna una variable a partir de una llamada al método.

4

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

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

La primera es tan legible como el segundo, y requiere menos trabajo

var myvariable = ResultFromMethod(); 

aquí, tienes un punto, var podría hacer que el código sea menos legible. Me gusta var porque si cambio un decimal a un doble, no tengo que ir a cambiarlo en un montón de lugares (y no digo refactor, a veces lo olvido, simplemente déjame var!)

EDITAR: acaba de leer el artículo, estoy de acuerdo. lol.

1

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

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

John.

0

Hay una really good MSDN article sobre este tema una esboza algunos casos donde no se puede utilizar var:

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

  • var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function.
  • var cannot be used on fields at class scope.
  • Variables declared by using var cannot be used in the initialization expression. In other words, this expression is legal: int i = (i = 20); but this expression produces a compile-time error: var i = (i = 20);
  • Multiple implicitly-typed variables cannot be initialized in the same statement.
  • If a type named var is in scope, then the var keyword will resolve to that type name and will not be treated as part of an implicitly typed local variable declaration.

Yo recomendaría comprobando para comprender las implicaciones completas de usar var en tu código.

10

Lo uso solo cuando es claramente obvio qué var es.

claro para mí:

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

no está claro para mí:

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

I'm seeing a pattern for stackoverflow success: dig up old CodingHorror posts and (Jeopardy style) phrase them in terms of a question.

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

9

El mejor resumen de la respuesta que he visto es Eric Lippert's comment, que básicamente dice que debe usar el tipo concreto si es importante de qué tipo es, pero no lo es. Esencialmente, la información del tipo debe reservarse para los lugares donde el tipo es importante.

El estándar en mi empresa es usar var en todas partes, al cual llegamos después de reading various recommendation and then spending some time trying it out to see whether the lack of annotated type information was a help or a hindrance. Sentimos que fue una ayuda.

La mayoría de las recomendaciones a las que las personas se han vinculado (por ejemplo, la de Dare) son recomendaciones hechas por personas que nunca han intentado codificar utilizando var en lugar del tipo concreto. Esto hace que las recomendaciones sean casi inútiles, porque no están hablando por experiencia, simplemente están extrapolando.

El mejor consejo que puedo darle es que lo intente por usted mismo, y vea lo que funciona para usted y su equipo.

1

Solo tiene sentido, cuando no se conoce el tipo por adelantado.

Cuestiones relacionadas