Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 30 de septiembre de 2014
C#
[Actualizado 16-Nov-2014] El equipo de diseño del lenguaje C# ha decidido finalmente no incluir esta característica en la versión 6. En fin, fue bonito mientras duró :(

Seguimos comentando novedades que encontraremos en la próxima versión de C#, y en esta ocasión vamos a ver una nueva característica que, sin resultar espectacular, sí nos va a proporcionar una fórmula más cómoda y concisa para resolver algunos escenarios bastante habituales.

Seguro que os resulta familiar el siguiente código, más que nada porque lo habréis escrito decenas o cientos de veces:


Personalmente, la introducción de parámetros out en las llamadas siempre me resulta incómodo porque me hace volver atrás para declarar una variable expresamente para la ocasión. Y hay otros casos en los que la sensación de vuelta atrás es igualmente molesta.

Pues la respuesta de C# a este frecuente escenario, y como veremos enseguida a otros más, son las llamadas declaration expressions, que vendrá a traducirse como expresiones de declaración o algo así. Esta nueva característica permite introducir declaraciones de variables en el interior de expresiones, por lo que el ejemplo anterior podría implementarse de forma más concisa:



Como podréis observar, hemos introducido la declaración de la variable en línea, justo en el lugar en el que la vamos a necesitar, lo que nos ahorra esa molesta vuelta atrás para declararla.

Veamos otro ejemplo. Esta vez vamos a utilizar una expresión declarativa con un parámetro ref que inicializamos también sobre la marcha:



¿Interesante, verdad? Pues veamos otro ejemplo bastante frecuente: el uso de variables para almacenar temporalmente el resultado de una expresión que necesitamos reutilizar más adelante. Seguro que no son pocas las veces que os encontráis con un escenario como el siguiente:



Por supuesto, a nadie se le ocurriría dejar ese código así; lo normal sería utilizar su equivalente más legible y eficiente:

image

Pues bien, usando la declaración en expresiones podríamos obtener un código como el siguiente:

image

Con esto, además de no tener que volver atrás para declarar la variable cuando estamos escribiendo el if, habremos conseguido en efecto colateral bastante interesante: no polucionar el bloque de código en el que nos encontramos con variables que sólo tienen sentido en un ámbito interior.

Es decir, en el nuevo C# la declaración de una variable en una expresión dará a ésta visibilidad únicamente en el interior del bloque de código en el que la utilizamos. Volviendo al ejemplo anterior, la variable index sólo será visible dentro del if, que es precisamente donde la necesitamos.

Como ya habréis adivinado, podemos utilizar este tipo de expresiones en cualquier punto de nuestro código: prácticamente, en todos los lugares en los que podamos introducir expresiones, podremos declarar variables. Esto quiere decir que también tendremos capacidad de usar esta característica desde el lado oscuro de la legibilidad:



Una última observación. Habréis notado que no es necesario indicar explícitamente el tipo de dato cuando declaramos variables de esta forma. Siempre que la inferencia de tipos tenga información para hacer bien su trabajo podremos usar var, mientras que en otras ocasiones tendremos que ser más explícitos. Vaya, que será exactamente igual que cuando declaramos variables de la forma tradicional.

En definitiva, creo que es una incorporación interesante al lenguaje que agilizará la codificación en esos escenarios tan frecuentes y, como efecto colateral, nos ayudará a que el ámbito de las variables sea más cercano a su punto de utilización. Pero como todo, úsese con sentido común ;-)

Y si queréis conocer más sobre el C# que se avecina, no os perdáis los posts anteriores de la serie:
Publicado en Variable not found.

4 Comentarios:

Huicho_Kike dijo...

Entonces por lo que he leído contigo, mas que introducir nuevas tecnologías como en pasadas entregas tales como Linq, expresiones Lambda o Entity Framework por mencionar algunas, este nuevo C# va encaminado a resolver algunas "deficiencias" que tenía el lenguaje ayudando mas al programador, es decir solo le pusieron mas azucar sintáctica ¿no?

Espero que se ademas de estos detalles (que se agradecen) esta entrega venga acompañada de características más poderosas (no me preguntes cuales ni para que casos, ya que mi experiencia es pobre y con lo que tiene C# 4.0 me basta y sobra) para que el lenguaje no se estanque y siga evolucionando como lo ha hecho desde hace 15 años.

josé M. Aguilar dijo...

Hola!

Sí, en líneas generales son pequeñas mejoras e implementación de algunos detalles que claramente faltaban.

En esta próxima entrega de C# no creo que vengan cosas más allá de las que vamos viendo en estos posts, y serán del estilo, pero no creo que esto sea señal de estancamiento ni nada parecido. Estoy convencido de que tenemos lenguaje para rato ;)

Otra cosa son las plataformas (como el Entity Framework que citabas), que ahí sí vamos a ver muchas novedades de calado en los próximos meses.

Saludos!




LuisLAP dijo...

Suerte que la declaración inline para out si se agregó para c# 7.0, y se puede utilizar desde VS 2015.

José María Aguilar dijo...

Hola!

Efectivamente, estas ideas y venidas al final acabaron bien :)

http://www.variablenotfound.com/2017/05/inline-out-variables-en-c-7.html

Saludos!