martes, 28 de abril de 2015

Preguntas de Entrevista .NET - Diferencia entre var y dynamic

Voy a empezar a escribir una serie de entradas y esta es la primera sobre las preguntas frecuentes que nos podemos encontrar en una entrevista de trabajo cuando aplicamos para posiciones de desarrollador .NET. Estas entradas van a estar orientadas a explicar los conceptos que los entrevistadores suelen preguntar y que es lo que esperan como respuesta. Muchas veces nos parece que las preguntas no tienen sentido o creemos que son funcionalidad que no se suelen utilizar. Sin embargo es bueno saber que cuando el entrevistador hace la pregunta es porque esta esperando un conocimiento de nuestra parte. Sin mas preámbulos vamos a tema que voy a hablar en esta entrada.

Diferencias entre VAR y Dynamic


Para los que no están familiarizados con el tema los keywords VAR y Dynamic nos brindan la posibilidad de no definir el tipo de dato que vamos a utilizar al momento de declarar nuestras variables. De esta manera nuestra declaración de variables quedaría así:

var x = "string";
dynamic y = "string";

Si comparamos estas dos variables vamos a obtener como resultado que ambas son strings y que ambas contienen la palabra "string".

Ahora si ambas me dan como resultado el mismo tipo de objeto, para que existen dos palabras reservadas que hacen lo mismo? bueno la respuesta rápida a esta pregunta es que parece que hacen lo mismo pero no lo hacen.
Como es esto? bueno es sencillo, la principal diferencia entre ambas es cuando se acoplan al tipo de datos, y esto es uno de los puntos mas importantes que marca, a mi entender, la mayor ventaja de dynamic sobre var. 
Cuando declaramos una variable utilizando la palabra reservada var esta debe ser inicializada en ese mismo momento. por que? bueno la respuesta es por lo que estuvimos hablando antes, var se acopla al tipo de datos en tiempo de codificación con lo cual una vez que inicializamos la variable la misma queda asociada al tipo de datos con el que la estamos asociando. Por mas que de la impresión de que no estamos poniendo el tipo de datos si lo estamos haciendo y nuestro código sigue siendo fuertemente tipado, y no vamos a poder guardar en esta variable otra cosa que no sea lo que guardamos cuando la declaramos. 
Por otro lado, cuando declaramos una variable utilizando dynamic no es necesario que la inicialicemos para que funcione. porque esto? porque dynamic se acopla al tipo de datos en tiempo de ejecución utilizando reflection. Como podrán imaginar una de las mayores ventajas de dynamic es que convierte a nuestra variable en débilmente tipada. Esto quiere decir que el código que pongo a continuación es perfectamente valido.

dynamic y = "string";
Console.WriteLine("Contiene: {0}", y);
y = 1;
Console.WriteLine("Contiene: {0}", y);

Una de las mayores ventajas que nos da dynamic es la flexibilidad como pudimos ver recién, sin embargo una de las desventajas es la que tienen la mayoría de los lenguajes débilmente tipados y es que podemos cometer un error al llamar alguna método o bien no saber que esta almacenado en la variable. Al utilizar reflection no nos damos cuenta del error hasta que la aplicación esta ejecutando.
La ventaja que nos dar la utilización de var es que muchas veces la inicialización de una variable es una sentencia larga que suele ser tedioso y poco vistoso repetir o simplemente no sabemos cual es el tipo de datos ya que la inicialización es el resultado de una ejecución de LINQ. En esos casos la utilización de var es una manera rápida y declarar variables.

Para concluir, lo que busca un entrevistador con esta pregunta es ver cuanto conocemos del framework y cuanto utilizamos del mismo o si solo respondemos porque lo vimos así en algún lado y hacemos las cosas de manera automática.

No hay comentarios:

Publicar un comentario