En este post voy a extenderme algo más de lo normal, pero creo que es bueno compartir esta información, que ya me ha tocado recordar más de una vez entre mis compañeros.
Hablaré brevemente (o al menos esa es mi intención inicial) sobre los tipos de Strings en groovy, string multi-linea y sobre los 'slashy strings' (strings delimitados por barras). ¡Manos a la obra!
Tipos de Strings
En groovy los Strings se pueden definir de tres formas distintas: con comillas simples, con comillas dobles o con barras. A continuación un ejemplo de las tres formas:
def str1 = 'Hola Mundo'
println str1.class.name // java.lang.String
def str2 = "Hola Mundo"
println str2.class.name // java.lang.String
def str3 = /Hola Mundo/
println str3.class.name // java.lang.String
Como se puede ver, las tres formas crean un objeto de tipo java.lang.String. Pero groovy soporta un tipo más avanzado de strings llamado GString.Un GString es como un String normal pero con la diferencia de que evalúa las expresiones que se encuentren dentro del string. Cuando groovy encuentra un string delimitado por comillas dobles o barras (ATENCIÓN: un String delimitado por comillas simples no evaluará las expresiones que contenga, no será nunca un GString) y con alguna expresión embebida, crea una instancia de org.codehaus.groovy.runtime.GStringImpl en lugar de java.lang.String. Será cuando se acceda al GString cuando se realice la evaluación de la expresión. Un ejemplo:
def nombre="Eylen"
def str1 = "Hola ${nombre}"
println str1 // Hola Eylen
println str1.class.name // org.codehaus.groovy.runtime.GStringImpl
def str2 = /Hola ${nombre}/
println str2 // Hola Eylen
println str2.class.name // org.codehaus.groovy.runtime.GStringImpl
def str3 = 'Hola ${nombre}'
println str3 // Hola ${nombre}
println str3.class.name // java.lang.String
Strings multi-lineaGroovy soporta strings que ocupen varias líneas. La forma de definirlos es usando tres comillas dobles o tres comillas simples.
Igual que con los strings de una línea, se pueden incluir expresiones que quieran ser evaluadas cuando se acceda al string. Sólo recordar que en el caso de definir el string multilinea con tres comillas simples, las expresiones interiores no se evaluarán.
Los strings multi-linea pueden resultar útiles sobre todo cuando tienes que escribir textos largos. Por ejemplo yo los he utlizado más de una vez para redactar emails que se enviarán mediante la aplicación. Aunque opino que es bastante trivial, pongo un ejemplo ya que siempre ayuda a aclarar conceptos.
def name = "Eylen"
def str1 = """Hola ${name},
esto es un string con varias lineas y expresiones a evaluar.
Esperemos que funciones bien."""
println str1
def str2 = '''Hola ${name},
esto es un string con varias lineas y expresiones a evaluar.
Esperemos que funciones bien.'''
println str2
Y estos son los resultados del anterior ejemplo al ejecutarlo. Como podéis comprobar, con tres comillas dobles sí se evalúan las expresiones pero con tres comillas dobles no.Hola Eylen,
esto es un string con varias lineas y expresiones a evaluar.
Esperemos que funcione bien.
Hola ${name},
esto es un string con varias lineas y expresiones a evaluar.
Esperemos que funcione bien.
Slashy StringsEste tipo de strings son aquellos que se definen mediante barras. Reconozco que no los utilizo demasiado, pero también que son muy útiles por la comodidad que aportan. Digo esto porque utilizando esta notación no es necesario escapar los caracteres especiales a excepción de la barra \/. ¡Imaginaros lo que nos podemos ahorrar con las expresiones regulares! Desde luego, hace las expresiones regulares (y otros casos que se os puedan ocurrir) bastante más legibles.
Os dejo un ejemplo sencillito (no de expresiones regulares, que no son mi fuerte...) para que veáis la diferencia.
def path1 = "C:\\docs\\examples\\example1.doc" def path2 = /C:\docs\examples\example1.doc/ println path1 // C:\docs\examples\example1.doc println path2 // C:\docs\examples\example1.docY eso es todo por ahora.
Enjoy!


0 comentarios:
Publicar un comentario