Con la llegada de Visual Studio 2015, una de sus novedades es que viene con C# en su versión 6, y estas son algunas de sus novedades:
- Inicializadores de propiedades implementadas automáticamente
- Propiedades inicializadas automáticamente de sólo lectura
- Empleo de miembros estáticos
- Interpolación de cadenas
- Métodos con cuerpo de expresión
- Iniciadores de índices
- Operadores condicionales de NULL
- Operador nameof
- Filtros de excepción
- Await en catch y finally
1.- Inicializadores de propiedades implementadas automáticamente
Supongamos este ejemplo:
Vemos que tenemos un par de propiedades autoimplementadas, este tipo de propiedades ya lo tenemos desde C# 3.0, para aquellos que no sepáis qué es os explico.
Una propiedad convencional sería algo así:
Si no necesitamos tener nada de lógica ni en el get ni en el set, todas estas líneas las podemos escribir en una sola:
public int X { get; set; }
El compilador automáticamente e internamente generará las líneas de arriba cuando vea esta línea, es decir, creará una variable de respaldo con sus métodos get y set y a través de la propiedad accederemos a esa variable de respaldo, a la hora de programar mucho más rápido no crees 😉
Volviendo al ejemplo anterior, a nuestra clase Point, vemos que tenemos las propiedades autoimplementadas X e Y, y tenemos el constructor de la clase:
public Point(int x, int y) { X = x; Y = y; }
Que asigna valores tanto a X como a Y.
¿Y si quisiéramos asignar las propiedades en la inicialización?
Pues ahora con C# 6, ya podemos, mira estos ejemplos:
public int X { get; set; } = 6;
public int Y { get; set; } = 5;
2.- Propiedades inicializadas automáticamente de sólo lectura
¿Y si la propiedad fuera de solo lectura?
Pues podemos darle valor igualmente de esta forma:
public int X { get; } = 6;
public int Y { get; } = 5;
¿Una mejora interesante no crees?
3.- Empleo de miembros estáticos
Ahora a demás podemos importar namespaces estáticos y acceder directamente a sus métodos, veamos el ejemplo de arriba importando System.Math
Como podemos observar, en el método Dist, ya no tengo que poner Math.Sqrt(…), puedo poner directamente Sqrt(…), ya que he importado la clase estática con un using static:
using static System.Math;
¿Imaginas ya no tener que escribir constantemente el namespace de los enumerados?
4.- Interpolación de cadenas
String.Format es una instrucción realmente potente, pero puede llegar a ser muy voluminosa en función de lo que queramos poner, en nuestro ejemplo anterior tenemos esto:
Algo sencillo, tan solo dos parámetros, pero veamos cómo podemos simplificarla:
Tan solo tenemos que usar la instrucción $ y poner dentro de las llaves los parámetros que queremos mostrar, bastante más claro, a que sí.
5.- Métodos con cuerpo de expresión
Y si ahora ese método aún lo pudiéramos simplificar más, ahora podemos haciendo lo siguiente:
public override string ToString() => $”({X}, {Y})”;
Ahora podemos evitar el return y las llaves si simplemente queremos devolver un resultado
También podemos hacer esto con funciones:
public double Dist => Sqrt(X * X + Y * Y);
De esta forma mira como queda la clase anterior:
¿Muy sencilla y simple queda nuestra clase verdad? 😉
6.- Inicializadores de índices
Imagina que tenemos el siguiente método:
Ahora podemos optimizarla de la siguiente forma:
Todo en una línea, simple, concisa y directa.
7.- Operadores condicionales de NULL
Tenemos ahora el siguiente método:
De esta forma hemos quitado las comprobaciones explícitas de null, en su lugar hemos empleado el nuevo operador “?.”, el funcionamiento es sencillo, si el lado izquierdo de la expresión es null, todo es null, si el lado izquierdo no es null, entonces ya podemos usar le punto.
Al poner un ? delante de las llaves y ya comprueba si el valor es Null, de esta forma hemos reducido las condicionales a lo que realmente importa.
Veamos más usos de este nuevo operador
A la hora de asignar eventos siempre comprobamos antes de esta forma:
8.- Operadores nameof
En este ejemplo:
Estamos lanzando como error el nombre del parámetro que es nulo, pero ¿qué pasa si cambiamos el nombre del parámetro? ¿Nos acordaremos también de cambiar lo que retorna el mensaje de la expceción?
Me apuesto lo que quieras a que no es así.
Pero ahora podemos dejarlo preparado para cuando refactorizemos también se cambie ese texto, de esta forma:
Se esta forma ya es código compilado y al cambiar el nombre del argumento de entrada (point) cambiará también al refactorizar en la excepción.
9.- Filtros de excepción
Imagina este bloque de excepción:
10.- Await en catch y finally
Con esta nueva version de c# ya podemos hacer tareas asíncronas en los bloques catch y finally, esto es una buena noticia para este tipo de tareas
Espero que con estas mejoras hagamos un código más limpio y mantenible.
Para más información visita: http://github.com/dotnet/roslyn, y si quieres formarte con el Curso de Basic.NET
SEAS es el centro de formación online del Grupo San Valero, especializado en el ámbito técnico, industrial y de empresa. Visita www.seas.es para consultar nuestra oferta formativa de cursos y másteres. Formación profesional para el empleo de calidad y accesible para todos.