Novedades en C#7

Como es habitual, con la salida de una nueva versión de Visual Studio/.NET Framework en camino, tenemos también una nueva versión de uno de mis lenguajes de programación preferidos: C# 7.0.

En este post simplemente voy a nombrar las características principales que se vienen, pero para mayor detalle pueden ir al post What’s New in C# 7.0 del .NET Blog o bien ver el video News Features in C# 7.0 de Mads Torgersen – presentado recientemente para el evento Connect(); -.

¿Qué se trae esta nueva versión C#? Dejemos que ellos nos cuenten muy brevemente y luego pasamos a detallar algunas de las novedades principales:

C# 7.0 adds a number of new features and brings a focus on data consumption, code simplification and performance.

Tengan en cuenta que no estamos ante la versión final, por lo que alguna de las cosas que se comentan a continuación pueden sufrir cambios.

Out variables

Hasta ahora cuando queríamos utilizar los parámetros de salida – out parameters – debíamos tener las variables definidas previamente. Esto no siempre nos resulta tan cómodo y elegante a la hora de escribir código, pero por suerte con C# 7.0 podemos declararlas directamente en la misma línea donde vamos a utilizarlas. 😉

Pattern matching

Con esta nueva capacidad tenemos la posibilidad de evaluar diferentes tipos de expresiones por medio de patrones. Entra las posibilidades que tenemos se encuentra la posibilidad de evaluar constantes, tipos de datos o variables. Además, en la misma expresión, podemos utilizar condiciones y/o extraer los valores de la misma.

Por el momento tenemos dos “lugares” donde podemos utilizar expresiones: is-expressions y switch statements.

Is-expresions

Una de las formas de usar estos patrones es en las “is expressions” – recordemos que antes solamente podíamos utilizar tipo de datos en este tipo de expresiones -. Veamos un ejemplo que puede ayudarnos a entender mejor su uso:

Si prestan atención al type pattern no solo evaluamos la expresión sino que también extraemos el valor de la misma y para los asignarselo a la variable i.

Switch statements

La clausulas case ahora no solo evalúan constantes, también lo hacen con patrones, yes!. En pocas palabras podemos “switchear” casi cualquier cosa, y sino me creen vean el siguiente ejemplo:

Sí, estamos evaluando distintos tipos de patrones en las clausulas case y además agregándoles condiciones. También pueden notar que podemos evaluar cualquier tipo de datos, no solo los primitivos.

Hay que tener en cuenta que ahora sí es importante el orden en que las clausulas case que se definen, ya que seguramente tendremos expresiones/patrones mas generalizadas que otras.

Tuples

¡Una de las grandes novedades de esta nueva versión!. Pensemos, ¿cuantas veces necesitamos devolver más de un valor en un método y no nos queda otra que optar por soluciones que tal vez no sean las más óptimas? Generalmente terminamos usando out parameters, clases custom – una por cada respuesta de un método, suelo llamarlas “responses class” – o tipos anónimos por medio de dynamic types.

Gracias a C# 7.0 nos podemos manejar contuple typestuple literals:

Como podemos observar el método getValuesById(…) retorna una tupla compuesta por tres elementos strings. Ahora bien, podemos referirnos a cada elemento de la tupla por medio del nombre “Item1”, “Item2”, etc (comportamiento por default). Sin embargo si queremos hacer más legible nuestro código podemos modificar este comportamiento de manera muy sencilla:

En el ejemplo anterior podemos ver dos maneras diferentes de asignarle nombres a los elementos de las tuplas: definiendolos en el tipo de retorno – tuple type – o en la respuesta directamente – tuple literal -.

A la fecha para poder trabajar con tuplas es necesario descargar el paquete de Nuget: System.ValueTuple

Deconstruction

Básicamente se trata de otra forma de utilizar las tuplas. En esta caso lo que hacemos es dividir una tupla en partes y asignar cada uno de los valores a variables. A continuación tres formas diferentes de utilizar esta nueva feature:

Local Functions

Muchas veces tenemos que definir funciones que solo tienen sentido dentro de un ámbito determinado, por ejemplo dentro de otra función. Ahora es posible hacerlo de forma más que sencilla:

Literal improvements

Con C#7 tenemos dos novedades en lo que respecta a literales. El primero es que podemos trabajar con el dígito separador “_” en los literales numéricos:

La finalidad del dígito separados es simplemente mejorar la legibilidad del código y no tiene efectos sobre el valor.

Por otro lado se presentaron los literales binarios que nos permiten trabajar directamente con patrones de bits:

Estas fueron las novedades que me parecieron más importantes destacar pero pueden descubrir mucho más en los los enlaces mencionados al inicio del post.

Anuncios

2 comentarios en “Novedades en C#7

  1. Excelente post amigo Sebys, ahora, viendo ese tema de los deconstructores y las funciones locales, no puedo evitar pensar inmediatamente en JavaScript, ya que con comportamientos que ya teniamos allí, lo cual puede ser positivo si se piensa agregar algún “toque” de lenguaje dinámico a c#.

    Esperemos que otras novedades nos van a traer tanto en C# 7 como es sus futuras versiones.

    Saludos,

    • Es verdad Julito, con el paso del tiempo le van incorporando características que ya vimos en otros lenguajes, un gran ejemplo es lo que vos comentas de los lenguajes dinámicos. Por otro lado es muy bueno que escuchen las sugerencias de la comunidad, la aparición de las tuplas es un golazo para muchos desarrolladores.

      Quienes pasamos gran parte del tiempo conviviendo con C# estás son grandes noticias, ya que la gran mayoría de estas features terminan simplificandonos el código que escribimos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s