C# 6.0 Preview

C# 6.0 será la próxima versión de este lenguaje, pero no es simplemente “una versión más”. De hecho, es imposible hablar de ella sin hablar de Roslyn, la nueva plataforma de compilación de .Net.

¿Por qué debería importarme Roslyn?

Como desarrolladores, nos encanta que nuestras herramientas sean cada vez más inteligentes y puedan ahorrarnos tiempo. Funcionalidades como Intellisense, CodeMap, Code Lens o “Go to definition” mejoran la productividad. Cuanta más información sobre el código tenga nuestro IDE, más ayuda nos podrá proporcionar… y esa es precisamente la idea detrás de Roslyn.

Roslyn expone APIs que permiten obtener toda la información que se genera durante la compilación del código. Cada fase de la compilación es ahora un componente separado al que se le puede pedir información:

Untitled

Podemos imaginarnos la potencia de estas APIs cuando tenemos en cuenta que los servicios de lenguaje C# y VB de Visual Studio vNext han sido completamente reimplementados usando estas APIs.

¿Qué tiene esto que ver con C# 6.0?

La inclusión de Roslyn en la ecuación ha permitido al equipo de C# incluir toda una miríada de características que anteriormente hubieran sido demasiado costosas de implementar. En esta nueva versión no veremos cambios rompedores en el lenguaje, sino un montón de pequeñas mejoras que mejoran nuestra productividad.

A continuación hablaré sobre algunas de las novedades que incluirá C# 6.0, pero tenéis toda la información en la web de Roslyn.

Initialisers for auto-properties y Primary Constructors

Estas dos nuevas características van muy unidas y nos permiten que reduzcamos enormemente la verbosidad de código como este:

image

Si nos fijamos bien, veremos que el constructor simplemente está dando valor a las propiedades, un caso bastante típico, y que dado que únicamente queremos un getter para Name, necesitamos declarar una variable privada. Con C# 6 podemos prescindir de la declaración del constructor gracias a “Primary Constructors” y podemos olvidarnos de darles valor gracias a “Initialisers for auto-properties”:

image

Using static

Esta característica nos permite ahorrarnos especificar la clase que contiene al método estático poniendo a ese tipo directamente en nuestros usings. Es decir, el clásico “Console.WriteLine” pasaría a ser simplemente “WriteLine”.

De hecho, Visual Studio nos notifica este tipo de atajos cuando note que no hacemos uso de ellos:

image

Declaration expressions

En muchos casos declaramos variables temporales para usarlas en un único punto:

image

Si no hiciéramos uso de la variable temporal, tendríamos que llamar dos veces al método. Con “Declaration expressions” podemos solucionarlo todo en la misma línea:

image

Esta vez el compilador puede inferir el tipo del lvalue ya que la declaración se produce junto a la asignación, haciendo que sólo deba consultarse el tipo de retorno del método.

Exception filters

Uno de los errores más comunes, especialmente cuando se viene de lenguajes que obligan al tratamiento de las excepciones, es capturar cualquier excepción y, si no es posible manejarla, relanzarla para que siga fluyendo.

Aunque pueda parecer una buena idea, eso implica la perdida de la pila y complica considerablemente la depuración de la aplicación.

El filtrado de excepciones permite capturar una excepción si se cumple una condición en concreto y dejar que fluya en otro caso. Esto nos permite manejar únicamente los casos útiles sin dañar la pila de los demás.

Actualmente esta característica no está implementada en C# 6.0 pero lo estará en la versión final.

Null-propagating operator ?

He dejado mi favorita para el final. Gracias a la propagación de nulos, podremos simplificar enormemente la comprobación de variables nulas. Es algo que tenemos que hacer frecuentemente, comprobar si una variable es distinta de Null y en ese caso hacer algo.

Código como este:

image

Pasaría a ser:

image

Ciertamente todas estas características pueden ser consideradas como azúcar sintáctico (aunque algunas con esteroides). Sin embargo, todas ellas están orientadas a aumentar nuestra productividad y, con la inclusión de Roslyn, a incrementar la potencia de nuestras herramientas para que puedan hacernos la vida más fácil.

No lo dudes, descárgate Visual Studio “14” CTP y comienza a trastear con C# 6.0 hoy mismo.

Happy hacking!

Pablo Carballude (@carballude_es)