delucas.blog!

sobre mí

Un poquito de GString en Groovy

22 Jul 2013 | groovy programación

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.

comments powered by Disqus