Novedades en C# 6.0 (I)

En mi anterior entrada, dónde hacia una introducción a Roslyn, ya citaba que no solo del compilador se trataba si no que tendríamos mejoras para que nuestro código sea mas compacto, legible y este mejor organizado.

El concepto de code smell lo podremos aplicar aquí y podremos ver cómo C# en su versión 6.0 nos ayuda mucho en ello con pequeñas pero significativas mejoras. Cómo hay varias y en bastantes quiero profundizar en detalle, he preparado una serie de entradas diferentes y en esta,me he centrado en aquellas que son más mundanas pero no por ello menos importantes.

Inicializar las propiedades

En todas nuestras clases tenemos propiedades y estas, en ocasiones, deben ser inicializadas. Con esta nueva versión, esto se puede hacer directamente al momento de declarar la propiedad y asignar su valor.

public class Employee
{
   public string First { get; set; } = "Francesc";
   public string Last { get; set; } = "Jaumot";
}

Propiedades de solo lectura

Relacionada con la anterior, podemos hacer exactamente lo mismo aunque nuestra propiedad sea solo de lectura, es decir, solo con get y sin set.

public class Employee
{
   public string First { get; } = "Francesc";
   public string Last { get; } = "Jaumot";
}

Por debajo, esto, es implícitamente declarado cómo readonly y esta se puede inicializar en el constructor de la siguiente manera,

public class Employee
{
   public string Name{ get; };

   public Employee(string first, string last)
   {
       Name = first + " " + last;
   }
}

Mejora en el uso de clases estáticas

¿Cuantas veces hemos visto Console.WriteLine(“”); o bien Math.Sqrt(2); entre muchas otras? En esta versión tan solo deberemos ocuparnos de hacer el correspondiente using y poder usar el método de dentro de la clase estática de una forma más simple.

using System.Console;
using static System.Math;

class Program
{
    static void Main(string[] args)
    {
        WriteLine(Sqrt(2));
    }
}

Interpolación en el string

Personalmente, la que más me gusta. Muchas veces deberemos devolver un string formateado, por ejemplo en una pantalla modal que nos muestre el nombre del cliente, o bien un nombre desde recursos en función del tipo de error, etc..Hasta ahora, debíamos hacer,

String.Format("¿Está seguro de eliminar el cliente {0} y número {1}?",obj.NombreCompleto, obj.IdentificadorCliente);

Ahora esto se ha simplificado y en casos dónde tengamos que concatenar varias cadenas el código, nos quedará limpio y ordenado.

return s = $"¿Está seguro de eliminar el cliente {obj.NombreCompleto} y número {obj.IdentificadorCliente}?";

Nombre del operador o clase

Este me encanta, sobretodo para los mensajes de error. Anteriormente teníamos el código así,

if (paramValue == null) throw new ArgumentNullException("paramValue");

Actualmente, lo veremos así,

if (paramValue == null) throw new ArgumentNullException(nameof(paramValue));

El operador nameof es en tiempo de compilación y no penaliza en rendimiento, ademas que nos servirá y mucho, para los que usamos INotifyPropertyChanged en MVVM.
Si alguna vez tenemos que hacer una refactorización, esto nos serviría muchísimo pues el nameof se verá afectado y dentro de la cadena, a no ser que uses alguna herramienta adicional, no aplicaría.

Recordar que algunas de estas mejoras pueden cambiar en su versión final, pero tenéis mi compromiso de que actualizaré el post a medida que tengamos más información 😉

Saludos y a por el siguiente!