Codepoint

by Trentia Consulting

C# 6 : Nuevas Características, Exception Filtering & String Interpolation

La ultima versión de C# que ya se encuentra en funcionamiento es C# 6, con esta versión vinieron varias características de lo más útiles pero poco conocidas por algunos, hoy os traemos un par de ellas, las que creemos que mas uso “cotidiano” se les puede dar!

Exception Filtering

La primera que trataremos son los filtros para excepciones.

El filtro para excepciones nos permite añadir una condición al bloque catch de un try, así evitando la ejecución del bloque catch si la condición no se cumple. Esto es diferente a anidar una bloque if dentro del bloque catch y relanzar la excepción ya que en ese proceso se pierde información relacionada con la excepción original. Además es mucho más limpio a nivel de código.

Veamos un primer ejemplo :

Implementación en C# 6:

//Exception filters :
try
{
    throw new NotImplementedException();
}
catch(NotImplementedException ex) when ((DateTime.Now.Day % 2) == 0)
{
    Console.WriteLine("Hoy es par");
}
catch(NotImplementedException ex) when ((DateTime.Now.Day % 2) != 0)
{
    Console.WriteLine("Hoy es impar"); 
}
         	

Implementación C# 5:

try
{
    throw new NotImplementedException();
}
catch(NotImplementedException ex)
{
    if((DateTime.Now.Day % 2) == 0)
    {
        Console.WriteLine("Hoy es par");
    }

    throw;
}
catch(Exception ex)
{
    if((DateTime.Now.Day % 2) != 0)
    {
        Console.WriteLine("Hoy es impar");
    }

    throw;
}

 

Se nota a simple vista la diferencia entre la escritura de un código equivalente. A mi juicio esta característica era una evolución lógica del lenguaje, una sintaxis completamente inteligible visualmente y una palabra clave con la que la mayoría de los .NET developers ya estamos familiarizados (when).

Por plantear un caso de la vida real en el que podríamos utilizar esta característica, los logs de errores y excepciones.

// Example 2
try
{
    throw new NotImplementedException();
}
catch (NotImplementedException ex) when (Log("Error"))
{
    //Caching
}
	

Donde, claro esta,“Log” devuelve un valor booleano. y este llevaría el mensaje o la excepción a nuestro sistema de logueo preferido ( BBDD, fichero, servicio web , etc... )

String Interpolation

La interpolación de cadenas de texto nos permite la inserción de expresiones directamente dentro de los “string” que estén precedidos por el carácter “$” así pues representa una alternativa simplificada al clásico “string.Format”.

Incorporando esta característica de C# 6 podemos escribir cosas así :

int Number1 = 25;
int Number2 = 67;

Guid id1 = Guid.NewGuid();

string CadenaResultante = $@"
    El numero 1 es {Number1} 
    El numero 2 es {Number2}
    El Guid1 es {id1}
";

}

///Output
    El numero 1 es 25
    El numero 2 es 67
    El Guid1 es f6f9f4cf-9261-4d90-8f53-636d920d5d28

Como vemos podemos intercalar los valores de variables locales en los strings pero podemos ir algo más allá:

string CadenaResult = $@"
    Hoy es día : {DateTime.Now},
    El resultado de 2 + 5 es : {2 + 5},
    Creacion de un guid : {Guid.NewGuid()}
";

También valido, donde vemos que podemos usar propiedades de objetos, métodos y expresiones.

Y queriendo rizar un poco mas el rizo una de las características que aporta el “string interpolation” es que se les puede dar formato a ciertos tipos de datos con una sintaxis muy sencilla.

int Number1 = 25000;
string CadenaResult = $@"
    Numero Formateado : {Number1:c4},
    Fecha de hoy formateada: {DateTime.Now:dddd, MMMM dd - yyyy}
";

///Output
    Numero Formateado : 25,0000 ?,
    Fecha de hoy formateada: miércoles, julio 27 - 2016

Todos estos ejemplos pueden escribirse con string.Format pero la limpieza del código, las conversiones de tipos y los formatos tal y como los permite el string interpolation en C# 6 son un aporte muy significativo .

 

Esta claro que estas características de C# 6 solo están disponibles con las ultimas versiones de las herramientas de Microsoft.  (Visual Studio 2015).

Ya veis, mirar hacia adelante siempre nos facilita las cosas, innovar o morir!

Agregar comentario

Loading