C# 7.0 – Specification – Expression Bodied Members
En C# 6.0 se introdujo el concepto de Expression Bodied Members con métodos y propiedades.
En C# 7.0, se ha mejorado este concepto incluyéndolo en miembros, constructores, destructores y accesos a propiedades.
Quizás en este punto, convenga hacer un repaso a C# con respecto a Expression Bodied Members.
Supongamos el código siguiente que corresponde con una sencilla función que recibe dos valores e indica si son iguales o no:
private static bool IsEqual(int value1, int value2) { return value1 == value2; }
Esta función a partir de C# 6.0, se podría hacer de la siguiente forma equivalente:
private static bool IsEqual(int value1, int value2) => value1 == value2;
Como podemos ver, eliminamos las llaves e incluso el return.
Otra aplicación de los Expression Bodied Members es en las propiedades.
Un ejemplo de esto sería el siguiente código de C# 5.0:
public static DateTime GetDateTime { get { return DateTime.UtcNow; } }
El mismo código equivalente en C# 6.0, quedaría de la siguiente forma:
public static DateTime GetDateTime => DateTime.UtcNow;
Ahora, en C# 7.0 y siguiendo las mejoras que se añadieron a C# 6.0 respecto a esta característica del lenguaje, se ha ampliado su uso en constructores, destructores, accesos a propiedades y a eventos.
Así, para el constructor de una clase de ejemplo, podremos utilizar algo parecido a lo siguiente:
public Foo() => Console.WriteLine($"Class => Constructor of {nameof(Foo)}");
Para un destructor, el código quedaría de la siguiente forma:
~Foo() => Console.WriteLine($"Class => Destructor of {nameof(Foo)}");
El caso de las propiedades es algo más sencillo, quedando estas de la siguiente forma:
private static int _value; public static int Value { get => _value; set => _value = value; }
Como podemos observar, se trata de una mejora sobre una característica ya existente en el lenguaje desde C# 6.0.
¡Happy Coding!
2 Responsesso far
Esta característica es bastante menospreciada, pero desde mi punto de vista se gana bastante al hacer el código mas claro, aparte de mas compacto, recordemos que, en general, entre menos líneas de código, mejor.
Ejemplo con un método que utiliza linq:
public (int, char) MayorACero(
IEnumerable numeros,
IEnumerable letras)
{
return from x in numeros
from y in letras
where x > 0
return (x, y);
}
public (int, char) MayorACero(
IEnumerable numeros,
IEnumerable letras)
=> from x in numeros
from y in letras
where x > 0
return (x, y);
Hola LuisgiMX,
muchas gracias por compartir otro ejemplo de las bondades de esta carcterística.
Solo comentar que bajo mi punto de vista, no siempre cuanto menos líneas de código mejor, ya que un código debe poder leerse bien, además de estar enfocado al buen rendimiento y buena mantenibilidad.
En este caso puede ser, pero no siempre se debe poder cumplir esa máxima.
Tan sólo quería puntualizar esto para evitar confusiones a los programadores más noveles. 🙂
Un saludo,
Jorge