Lilypie Primer PicLilypie Primer Ticker

martes, 13 de noviembre de 2007

C# 3.0: Variables locales implícitamente tipadas

Una innovación interesante de la versión 3 de C# es la posibilidad de que el programador quede liberado de definir el tipo de dato de cada variable dejando a criterio del compilador el inferir el tipo de la variable, en base al valor a que se inicialice la variable.

Asi por ejemplo si inicializamos una variable x con el valor 1 (uno), resulta obvio que x es una variable de tipo int. O si inicializamos y con el valor "Hola mundo", es posible afirmar que y es del tipo string. Entonces es posible que el compilador determine (infiera) el tipo de la variable que estamos declarando, liberándonos de esta tarea.

C# 3 incluye la palabra reservada var que le indica al compilador que debe inferir el tipo de la variable que estamos declarando. Por ejemplo, a partir de la instrucción:

var x = 1;
var y
= "Hola mundo";

el compilador puede inferir que x es de tipo int. y que la variable y es del tipo string.

Es un error pensar que var declare una variable tipo Variant, es decir, una variable que puede cambiar su tipo dinámicamente. var simplemente nos evita tener que especificar el tipo de una variable al momento de declararla. Para el CLR cada variable tiene un y solo un tipo de dato, por tanto, el siguiente código no compila:

var x = 1;
x
= "Hola"; // Esta linea no compila

porque el compilador determinó que x es del tipo int, por lo que es ilegal asignarle un valor del tipo string.

El valor de inicialización es obligatorio cuando se declara una variable con var, asi el siguiente código no compila:

var x; // Esta linea no compila

porque el compilador necesita un valor a partir del cual pueda inferir el tipo de dato.


También es posible inferir el tipo de los arrays usando var, asi:

var numeros = new[] {1,2,3};

a partir de new[], el compilador sabe que estamos declarando un Array, y a partir de la lista de valores puede determinar el tipo de sus elementos.

Finalmente var también puede ser usada para declarar tipos complejos como listas o diccionarios, asi:

var lista = new List<int>();
var diccionario
= new Dictionary<int, string>();

No hay comentarios.: