La palabra reservada var,
viene a significar una asignación implícita de tipos. Esto se traduce en que el
compilador será el que averigüe cual es el tipo que hay que asignar a esa
variable, ósea utilizará la Inferencia de Tipos.
Cuando salieron las primeras noticas sobre esta mejora,
trajo mucha controversia, al igual que los métodos extensores,
dentro de la comunidad ya que muchos pensaban que esto rompía las buenas
prácticas de programación y la fortaleza de tipos,
cosa que no era cierta como veremos más adelante.
Es fácil confundir este tipo de variable con antiguo y
costoso Variant
de Visual Basic 6.0,
o llegar a pensar que simplemente es un objeto de tipo object camuflado, pero nada de eso, es mucho más.
Vamos a ver un ejemplo para salir de dudas:
Como podemos ver, a esta variable ‘var’, le estamos asignando un objeto string.
Como podemos ver en la imagen, cuando hacemos uso del intellisense, éste en tiempo de compilación, nos muestra que es una variable de tipo string y nos pone a nuestra disposición toda su interface.
Como podemos ver la imagen, el compilador infiere el tipo de después del igual, para asignárselo a el var.
Otros ejemplos un poco más generalizados:
En la primera línea de este ejemplo, vemos que el compilador
inferirá el tipo int a
través del valor ‘9’. Algún
purista en esto de la programación hubiera puesto el grito en el cielo, ya que
un objeto de tipo short,
ocupa menos memoria, pero el framework
no trabaja así, y opta por el tipo Int32, ya que está mucho más optimizado, algo que podemos comprobar en otros métodos como por
ejemplo el DateTime.Today.Day-Month-Year,
que también nos devuelven un Int32.
Podríamos forzar el tipo a otro numérico con cualquier tipo
de casting:
Esto también podría pasar con la inferencia entre los tipos float, doublé o decimal:
Limitaciones de las variables con asignación implícita:
- Solo se puede utilizar cuando la variable se inicializa dentro de la misma instrucción.
- No se puede utilizar en campos de clase.
- No es posible inicializar varias variables de tipo implícito dentro de la misma instrucción.
- No se puede utilizar como tipo para para parámetros de métodos.
- No se puede utilizar como tipo de devolución
- No se puede utilizar como parámetro de tipo en generics.
El uso de la palabra reservada var, se
ha generalizado bastante, tanto es así que software como Resharper, lo aconseja por defecto dentro de suite para Visual Studio.
En ocasiones puede hacernos el trabajo más sencillo y reduce el código, pero en
otras puede llegar a dificultar la comprensión del código para otros
programadores.
El uso de la palabra reservada var, es necesaria y obligatoria para los tipos anónimos
(que veremos en el siguiente post), y también puede ser recomendada, según
gustos claro para el uso con LinQ, usings o
instanciaciones tan evidentes como las que hemos visto en este post, pero para mi gusto, abusar de ella puede llegar a ser contraproducente.
Ya que en este tipo de sentencia nos puede ayudar bastante
saber el tipo dentro de la instanciación. Como no, también es importantísimo,
el nombra bien las variables con nombres descriptivos, y nada de eso de ‘a’.
Como hemos podido comprobar, según vamos avanzando, vamos encadenando conocimentos dentro de las bases que forman LinQ y todo su entorno.
Excelente Paco!
ResponderEliminarMuchas gracias santi,
ResponderEliminarEs un verdadero placer leer mensajes como este, y más viniendo de ti.
Un abrazo