2010-10-29 24 views
16

Duplicar posible:
C# 'var' vs specific type performancevar o no usar var

Hola a todos,
hace poco vi código que utiliza var mucho.
ej .:

var myString = GetAnyString(); 
var myInstance = GetClass(); 

en lugar de

string myString = GetAnyString(); 
MyClass myInstance = GetClass(); 

Además de la facilidad de lectura (creo que el uso de var no es muy legible), ¿hay ventajas y/o desventajas que lo usan? ¿Qué hay de rendimiento

+0

"C# 'var' versus performance de tipo específico" la pregunta no cubre la pregunta que se hace. –

+0

Hay muchas discusiones sobre 'var' en el sitio en varios aspectos de la misma. De la actuación (que se eligió), la practicidad de su uso, la naturaleza subjetiva de por qué se usa en primer lugar, etc. Todos siguen siendo relevantes hoy. Haga su elección, es un duplicado. –

+1

"Además de la legibilidad (creo que usar var no es muy legible)" - no, var es más legible que las menciones redundantes del tipo, que es una de las razones por las que los idiomas modernos tienen inferencia de tipo. "¿Qué tal el rendimiento?": Esto sugiere una grave falta de comprensión de los conceptos básicos del lenguaje ... C# está tipado estáticamente. –

Respuesta

11

var se reemplaza por el compilador con el tipo correcto, por lo que no se ejecuta el rendimiento en tiempo de ejecución, aparte de fr om una sobrecarga de tiempo de compilación muy pequeña tal vez (veeeeeeeery pequeño).

En realidad, desde un punto de vue legibilidad, yo personalmente hago de la siguiente manera:

  • instanciación variable: object myVar = new object();

  • propagación variable: var myVar = anotherVar.getComplexObject();

Además, es posible tenga la tentación de usarlos cuando tenga una instanciación de tipo muy compleja, como:

var myDict = new Dictionary<string, List<Tuple<string, object>>>(); 

Aquí, realmente mejora la legibilidad.

+2

Actualmente, trabajando actualmente en un proyecto Java, me encuentro MUY frustrado de que la palabra clave var no esté disponible es Java, especialmente durante la propagación de variables, cuando NO DESEA buscar en la documentación para saber de qué tipo es esa variable. conseguido y cómo escribirlo correctamente. –

+13

¿Cómo puedes saber cómo usar la variable si no sabes su tipo? – Goldorak84

+1

Solo como curiosidad: en Java 7+, el ejemplo anterior del 'Diccionario' se puede escribir como' Mapa >> myMap = new HashMap <>(); ', utilizando el nuevo "operador de diamantes" (bueno, excepto que no hay ningún tipo de 'Tuple' en el JDK). –

4

hay ventajas y desventajas al usarlo?

Una ventaja: menos tipeo.

(creo que el uso de var no es muy legible)

I parcialmente de acuerdo con este punto.

Es menos legible cuando tiene var s = foo(); en lugar de string s = foo;. En otros casos, puede ser más legible.

¿Qué tal el rendimiento

En tiempo de ejecución no hay diferencia. El compilador lo convierte en el mismo código intermedio como si hubiera declarado explícitamente el tipo.

+1

"Es menos legible cuando tienes var s = foo(); en vez de cadena s = foo;" - Los problemas de legibilidad provienen por completo de tener nombres sin sentido. Saber que una cosa con un nombre sin sentido obtenido de un método con un nombre sin sentido es una cadena no ayuda. Ahora uso var/auto como filtro de entrevista ... las personas que piensan que la inferencia de tipo hace que el código sea menos legible no es contratado. –

+1

Jim Balter ¿Estás diciendo que el nombre de la variable debería inferir el tipo? Porque eso me suena a deshacer tu "var", es decir, escribir más – Epirocks

20

Es subjetivo, pero no me gusta usar vars. En cuanto a mí, no mejoran la legibilidad.

Pero directriz general sobre var uso es el siguiente:

Uso var cuando es absolutamente claro qué tipo de la variable que se está declarada:

Dictionary<string, Dictionary<string, string>> varOfSomeLongType = new Dictionary<string, Dictionary<string, string>>(); 

o cuando se está declarando variables de tipo anónimo:

var linqResult = from element in SomeCollection 
       select new { element.A, element.B } 
+7

LINQ es una de las pocas situaciones en las que usar var en mi opinión. –

+0

Creo que es más que @Andrew Bezzub estaba usando LINQ para hacer un tipo anónimo. Mucha de mi experiencia (que probablemente difiere de la de otras personas), por lo general necesito los resultados de la consulta LINQ de inmediato, y/o los tipos que LINQ escupe de vuelta todavía son bastante legibles. Si comienza a ponerse demasiado feo, por lo general trato de volver a evaluar cómo voy, ya que probablemente sea cada vez más peligroso mantenerlo en ese punto. Si uso var, es mucho más difícil de detectar y corregir. – Gurgadurgen