Sobre el uso de var programando con CSharp


Hola a todos,

Hoy os quería contar mi opinión, basada en alguna que otra lectura y una buena recomendación sobre el uso de var cuando programo con C#. Y es que, me he encontrado con esto, ahora que estoy trabajando frecuentemente con ello a la hora de usar LINQ. A menudo, cuando buscas información sobre consultas con LINQ, te puedes encontrar con ejemplos como el que voy a mostraros a continuación.

var example = (from entities in context.Entities()
               where entities.id == ID
               select entities).Single();

Como muestra un botón:

http://msdn.microsoft.com/en-us/library/bb397927.aspx

Como dice la guía de referencia de C# por medio de var, podemos establecer de forma implícita el ámbito de una variable. Una declaración implícita de una variable local, no obstante, está fuertemente tipada, como si el tipo se hubiera declarado, pero es el compilador el que lo hace.

El uso de var puede tener algunos usos recomendados, pero por lo general, salvo en el caso que veremos más adelante, usaría una declaración explícita del tipo.

Entity example = (from entities in context.Entities()
                  where entities.id == ID
                  select entities).Single();

La declaración explícita además de evitar al compilador el trabajo de establecer el tipo, a nivel de desarrollo tiene un significado semántico que en caso de usar var estaríamos perdiendo. Cuando desarrollamos (Clean Code dice XD) es importante escribir código que sea legible y entendible y en mi opinión usando var en casos en que no sea estrictamente necesario perdemos ese significado semántico y hace menos entendible nuestro código.

var example = (from entities in context.Entities()
                  select entities).ToList();

List<Entity> example2 = (from entities in context.Entities()
                  select entities).ToList();

Aquí vemos la diferencia que explicaba. Pero, ¿Cuando es realmente necesario utilizar var?. Pues cuando definimos tipos anónimos. Vamos a ver un ejemplo de esta situación.

var example = (from entities in context.Entities()
               where entities.id == ID
               select new { Field1 = entities.example1, Field2 = entities.example2});

Yo, como referencia, siempre que usando LINQ, lo que devuelvo es un tipo que puede ser reconocido, no uso var, y solo acudo a él, cuando se trata de un tipo anónimo.

Espero que os sirva de ayuda, y como siempre estoy abierto a comentarios y sugerencias que puedan enriquecer lo que os he comentado

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s