Comencemos desde el principio. Los miembros de función son aquellos miembros de un tipo que contienen código ejecutable, como métodos, propiedades, indexadores, operadores y otros. En general, todos ellos permiten implementar su comportamiento mediante la introducción de un bloque de código, tradicionalmente enmarcado entre llaves.
Pues bien, esta novedad del lenguaje permite sustituir el cuerpo de miembros de función por una concisa expresión lambda, logrando simplificar bastante el código y acelerando su creación.
Pero veámoslo con un ejemplo. Observad la siguiente clase, y más concretamente la cantidad de caracteres necesarios para implementar su propiedad de sólo lectura
FullName
en C# tradicional:A partir de C# 6, podremos dejarla así de limpita:
Genial, ¿verdad? De un plumazo hemos eliminado muchísimo ruido de nuestro código, mejorando la legibilidad y evitando gran cantidad de golpes de tecla. Observad que incluso hemos eliminado el bloque
get
, implícito cuando usamos la sintaxis lambda en una propiedad.Aunque la lambda del ejemplo anterior es simplemente una expresión de concatenación, al codificarla podríamos usar cualquier tipo de expresión, y desde ella tendremos acceso a cualquier miembro que también tuviéramos disponible al usar la sintaxis tradicional, como sus demás miembros de instancia o estáticos, privados o públicos.
De nuevo volviendo al ejemplo anterior, hemos mostrado cómo reescribir una propiedad, pero por supuesto podemos hacer lo mismo con métodos. Esto será especialmente interesante para simplificar aquellos cuyo cuerpo sólo tengamos una línea con un
return
; como muestra, fijaos que controladores MVC más bonitos podríamos escribir en escenarios simples:Bueno, y como podréis imaginar también podemos usar esta sintaxis con métodos estáticos:
Quizás la única precaución que hay que tener en cuenta es que en el caso de miembros de función que retornan
void
también podemos utilizar las lambdas, aunque en su interior sólo podremos usar expresiones sin retorno, al igual que ocurre con las lambdas tradicionales:También los operadores personalizados o implícitos son buenos candidatos a utilizar esta sintaxis reducida, puesto que su cuerpo consiste muy a menudo en una simple expresión de evaluación directa:
Asimismo, otro buen sitio para utilizarlo sería en los miembros indexadores:
Aunque pueda parecer obvio, un último detalle que creo interesante resaltar es que estas expresiones, a diferencia de las lambda tradicionales, no pueden tener cuerpo, es decir, no podemos usar llaves e incluir en su interior varias instrucciones. La verdad es que esto tiene bastante sentido porque en caso de necesitar un cuerpo ya tenemos la sintaxis anterior; esta nueva fórmula viene a ayudarnos cuando el cuerpo de un miembro de función es una simple expresión de evaluación directa.
En definitiva, de nuevo se trata de una mejora del lenguaje nada espectacular, pero sin duda interesante vistas a simplificar código y evitar pulsaciones de teclas innecesarias. En mi opinión será bien recibida y pronto tendrá bastantes adeptos.
Y por último, recordaros los posts anteriores de la serie por si queréis conocer otras novedades que acompañarán a C# 6:
- El operador “?.” en C# y VB.NET, más cerca
- Inicialización de propiedades en C# 6.0
- Uso de miembros estáticos en C# 6, ¿una buena idea?
- Declaración de variables en expresiones de C# 6
- El operador nameof de C# 6 y rendimiento del operador nameof.
- Inicialización de diccionarios en C# 6
- Mejoras en bloques try/catch de C# 6