La concatenación de String
en Java nos obligaba a generar líneas de código con este aspecto
String fullName = this.lastName + ", " + this.name;
La alternativa que nos trajo Java 1.5 de la mano de la cantidad de atributos variables fue la siguiente (es el primer paso dentro de la interpolación de cadenas)
String fullName = String.format("%s, %s", this.lastName, this.name);
Groovy lleva esto un paso más adelante y nos brinda un nuevo tipo de String
, el GString
. Gracias a él podemos obtener el mismo resultado de un modo muy simple y menos ceremonioso
def fullName = "$lastName, $name"
Sin embargo (y para terminar) tenemos este caso que me gustaría analizar: ¿cuándo toma el valor el GString
?
lastName = 'Martin'
name = 'Robert'
fullName = "$lastName, $name"
println fullName // -> "Martin, Robert"
lastName = 'Cunningham'
name = 'Ward'
println fullName // -> "Martin, Robert"
Un GString
toma su valor al momento de la creación (eager evaluation), salvo que le especifiquemos que debe re-evaluarse en caso de cambiar el valor de sus componentes (lazy evaluation):
lastName = 'Martin'
name = 'Robert'
fullName = "${->lastName}, ${->name}"
println fullName // -> "Martin, Robert"
lastName = 'Cunningham'
name = 'Ward'
println fullName // -> "Cunningham, Ward"
Y en un minuto hemos aprendido un poco más acerca de los GString.