Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 25 de noviembre de 2014
imageSeguimos con esta serie sobre las novedades de C# 6, y esta vez le toca el turno a una solicitada característica que recientemente ha entrado a formar parte de las elegidas para formar parte de esta nueva versión de nuestro lenguaje favorito: la interpolación de cadenas.

Dado que aún se encuentra en desarrollo no es posible probarlo de forma sencilla, por lo que de momento tendremos que conformarnos con sacar conclusiones basándonos en la discusión de diseño en Codeplex y de la documentación existente. Avisan además que la especificación puede ser modificada, por lo que todo lo que digamos aquí aún puede variar algo, aunque mayormente será (espero) válido.

En cualquier caso, el verbo interpolar se define por la RAE como “poner algo entre cosas” o “intercalar palabras o frases en el texto de un manuscrito antiguo, o en obras y escritos ajenos”. Y esto es justamente lo que permitirá esta nueva característica: la posibilidad de introducir valores de variables o resultados de expresiones en el interior de cadenas de texto sin necesidad de usar los incómodos mecanismos habituales, como la concatenación o alguna variante de string.Format() como  en el siguiente código:



En C# 6, podríamos conseguir lo mismo de la forma que se muestra a continuación, mucho más concisa y limpia:

image

El resultado, como podremos imaginar, es idéntico a las dos alternativas mostradas anteriormente. Pero observad los dos cambios importantes que encontramos aquí:
  • Primero, los literales de texto con interpolaciones deben estar precedidos del símbolo “$”.
  • Segundo, las expresiones a incluir deben ir especificadas entre llaves.
Durante el proceso de compilación, estas cadenas y las expresiones que se encuentren en su interior serán transformadas en una llamada a string.Format(), por lo que no existen ningún tipo de penalización del rendimiento en runtime, es un mero azucarillo sintáctico destinado endulzar la vida del desarrollador.

Este paralelismo con string.Format() hace que su uso sea prácticamente idéntico, excepto que en lugar de utilizar el índice de cada parámetro utilizaríamos directamente la expresión a mostrar.

Incluso podemos usar parámetros de alineación o formato, como acostumbramos a hacer:



Si quisiéramos introducir expresiones, el único aspecto adicional a tener en cuenta es que éstas deberán estar rodeadas por paréntesis:



Como carácter de escape utilizaremos la tradicional barra invertida back-slash "\", por ejemplo, si queremos incluir un carácter de apertura de llave en la propia cadena sin que sea interpretado como el inicio de una expresión.

En definitiva, se trata de una esperada incorporación (de hecho una de las más votadas en user voice), que nos ayudará a hacer nuestro código más legible y fácil de mantener. Nada que ver, desde luego, con esas interminables llamadas a string.Format() en las que era la ordenación de los parámetros lo que determinaba en qué lugar aparecían insertados los valores.

Aún no sé cómo encajará en un escenario en el que le veo utilidad, los literales al estilo heredoc, pero supongo que conforme se vaya cerrando el desarrollo lo tendremos más claro.

Ah, y como de costumbre, me gustaría finalizar recordándoos los artículos que llevamos ya hablando de las novedades de C# 6:
Publicado en Variable not found.

6 Comentarios:

Basil dijo...

Me ha gustado mucho esta nueva característica del lenguaje. Es una instrucción que se usa muchísimo y con la nueva forma de expresión mejora claramente la visibilidad y la rapidez al teclear.

Por fin una nueva opción que me convence totalmente.

José María Aguilar dijo...

Hola!

Sí, la verdad es que a mí también me ha convencido por completo, creo que es una ayuda interesante para un escenario muy común :)

Gracias por comentar!

Juan Irigoyen dijo...

Pero, y que sucede con la Cultura, el uso de la cultura en string.format es un factor importante.

José María Aguilar dijo...

Hola!

Están teniéndolo en cuenta, pero aún no tengo claro por dónde piensan tirar.

En la discusión de diseño puedes ver el enfoque en el que estaban trabajando inicialmente ( https://roslyn.codeplex.com/discussions/570292) y que de momento sigue siendo el último.

Saludos!

Joel Martinez dijo...

Gracias por compartir esta información. Es una característica muy esperada, especialmente para los que a veces abusamos del string.Format.

Aunque supongo que vendrán algunos inconvenientes con esta técnica, si no preguntemos a los desarrolladores de php...

José María Aguilar dijo...

Hola, Joel!

Sí, jejeje, seguro que inconvenientes encontramos, pero no creo que sean mucho peores a los desastres que podemos provocar con llamadas incorrectas a String.Format()

Gracias por comentar!