Para que sirve la keyword var en c#? Mitos Leyendas y Realidades

Hola de nuevo!!, después de algunos meses de tener abandonado el blog me he propuesto en volverlo a levantar las excusas y pretextos de porque no lo actualice salen sobrando así que espero estar un poco (un mucho) mas activo en el blog subiendo nuevamente tutoriales sobre MonoTouch y sobre las nuevas plataformas en las cuales el equipo de mono se encuentra trabajando tales como MonoDroid y MonoMac .

Y donde están mis modales “Feliz Año Viejo” (Si viejo porque ya estamos en el 2011 =P ). Ok vamos al punto.

En estos dias festivos tuve una pequeña discusión con cierta persona (cuyo nombre sera “Bob” por obvias razones) donde el me vio programando utilizando la palabra reservada “var” para declarar ciertas variables a lo cual Bob en su gran experiencia (que ya tiene programando un buen tiempo en c#) me dice:

Bob: Oye, porque utilizas “var” para declarar variables, eso hace tu código mas lento ya que le das mas carga al compilador, ademas de que tu código se hace mas difícil de leer, debes de declarar variables “Strongly Typed”

Este comentario desenlazó una muy enriquecedora platica a lo cual me lleva a darles los siguientes puntos:

Utilizar “var” no hace que tus variables sean “weakly typed”, todas las variables que se declaran con “var” son “Strongly Typed”, C# por naturaleza es un lenguaje statico. “var” no es un tipo de dato, “var” lo que hace es decirle al compilador que busque e infiera el tipo de dato deseado, este se infiere al momento de compilar. Dado que el tipo de dato se infiere al momento del compilado, el utilizar “var” no hará que tu programa sea mas lento. “var” en la mayoría de los casos es opcional, pero existen casos donde su uso es forzoso. La palabra reservada “var” como ya lo mencione, no es un tipo de dato. System.String si es un tipo de dato, int32, UInt32, float, decimal, object etc. Si son tipos de dato, pero “var” definitivamente no lo es. El tipo de dato es inferido al momento del compilado de la aplicación, este es inferido gracias a lo que se encuentra en la parte derecha de el simbolo de = como lo podemos ver en el siguiente ejemplo.

var variable = 10;

Es totalmente identico hacer lo siguiente:

int variable = 10;

En ambos casos la variable se hace “Strongly Typed” a una variable de tipo entero, así que si nosotros intentamos lo siguiente esto no va a compilar por nada del mundo:

var variable = 10;
variable = "Quiero que seas Diez";

Así que siguiendo la logica, ninguno de los siguientes casos compilará:

var variable; //Este no compila obviamente porque no tiene de donde inferir el tipo de dato.
var variable = null; //Tampoco compilará porque que tal si quisiéramos que variable fuera igual a 10

Dado la logica de arriba este siguiente ejemplo tampoco compilará:

int variable = null;

Una cosa en lo que si le doy la razón a Bob es que si usamos de manera exagerada la sentencia “var” en nuestro código si se reducirá la legibilidad de nuestro código de manera significativa, pero tambien esta el otro lado, “var” nos puede ayudar a reducir drasticamente lo escrito de código, ademas de aumentar como se lee el código, como podemos ver en el siguiente ejemplo:

var configuracion = new List<KeyValuePair<string, string>>();
List<KeyValuePair<string, string>> configuracion = new List<KeyValuePair<string, string>>();

En este ejemplo la palabra reservada “var” es opcional ya que es elección de nosotros lo programadores si la usamos o no. Tambien como lo mencione anteriormente hay veces que el uso de “var” es imposible de evitar, como lo es en el caso de linq:

var query = clientes.Select( c => new { Nombre = c.Nombre } );
//—————————————————————
var query = from c in clientes
select new
{
    Nombre = c.Nombre
};

Estos 2 últimos ejemplos son 2 formas de expresar una sentencia en LINQ, esto regresa un tipo “Anonimo”, pero no se confundan un tipo anonimo no significa que estemos utilizando variables “weakly typed”, Al contrario estamos utilizando variables “Strongly Typed” solo que le estamos dando el trabajo al compilador de que el cree el Tipo de dato necesario.

Espero que con esto quede mucho mas claro cuando usar “var” y hayan quedado claros algunos de los mitos y leyendas que circulan alrededor de el uso de esta palabra reservada.

Cualquier duda o comentario ya saben no duden en preguntar u opinar Saludos!!

Alex Soto