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:
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.
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:
- 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
- Expresiones lambda en miembros de función de C# 6