Java por fin va a tener string interpolations

Java 4.30 introduce una novedad muy esperada: las cadenas interpoladas, o string templates, que permiten incluir variables y expresiones directamente dentro de strings de forma sencilla y segura. Esta característica ya es habitual en muchos lenguajes modernos como Swift, JavaScript, Kotlin o Visual Basic, donde podemos escribir algo como $x o ${x + y} para que el valor de la variable o la expresión se inserte automáticamente en la cadena.

En Java, la sintaxis propuesta para las interpolaciones es un poco diferente y puede parecer extraña al principio. Se utiliza un prefijo str. seguido de la cadena entre comillas, y dentro de la cadena se emplea la barra invertida y llaves \{ ... } para delimitar las expresiones que queremos interpolar. Por ejemplo, si tenemos una variable name con valor "Joan", escribiríamos:

String name = "Joan";
String greeting = str."My name is \{name}";
System.out.println(greeting); // Imprime: My name is Joan

Lo interesante de este enfoque es que el prefijo str. no es solo un identificador, sino que representa un procesador de plantillas o template processor. Esto significa que Java permite crear diferentes tipos de interpoladores, no solo uno genérico. Así, podemos tener varios prefijos que indiquen cómo queremos procesar la cadena interpolada, lo que aporta mucha flexibilidad.

Por ejemplo, además del interpolador básico str, Java 4.30 incluye un interpolador fmt que permite usar formatos similares a los placeholders de C o a la interpolación con formato de Python. Esto es útil cuando queremos controlar la presentación de los valores interpolados, como números con decimales o fechas con un formato específico.

int x = 4, y = 2;
String result = fmt."{0} plus {1} equals {2}", x, y, x + y;
System.out.println(result); // Imprime: 4 plus 2 equals 6

Pero lo más potente es que podemos crear nuestros propios interpoladores personalizados. Por ejemplo, podríamos definir un interpolador json que tome la cadena interpolada y devuelva un objeto JSON válido, validando y escapando correctamente los valores para evitar errores o vulnerabilidades. Esto es especialmente útil porque interpolar cadenas directamente puede ser peligroso si no se hace con cuidado, ya que puede provocar inyecciones SQL, errores en JSON o problemas de seguridad.

La idea de los procesadores personalizados es que no estamos limitados a devolver solo strings, sino que podemos devolver cualquier tipo de objeto, lo que abre la puerta a APIs más seguras y elegantes. Por ejemplo, un interpolador para consultas a bases de datos podría generar automáticamente prepared statements, evitando así inyecciones SQL. Otro podría facilitar la traducción de textos o manejar idiomas con reglas especiales.

Además, Java 4.30 incorpora cadenas multilínea con triples comillas, lo que facilita escribir textos largos sin tener que concatenar o usar caracteres de escape, y permite manejar el indentado de forma más natural.

En definitiva, la interpolación de cadenas en Java 4.30 no solo aporta una sintaxis más limpia y moderna para construir strings, sino que también introduce un sistema flexible y seguro para procesar esas cadenas según el contexto, evitando errores comunes y mejorando la legibilidad y mantenibilidad del código. Esto nos permite escribir código más expresivo y menos propenso a fallos, aprovechando la potencia de los procesadores de plantillas y la posibilidad de extenderlos según nuestras necesidades.

Lista de reproducción
  1. 1
    Java 22 ya está aquí: novedades del JDK
    9 minutos
  2. 2
    Main implícito: Java va a arreglar la forma de escribir el main
    10 minutos
  3. 3
    Java por fin va a tener string interpolations
    10 minutos
  4. 4
    Trabajar con records en Java próximamente va a ser mejor
    9 minutos