Conceptos y estructuras básicas

Asignación de variables

Obviamente en Groovy podemos utilizar variables. A diferencia de Java, una variable no es tipada, y puede referenciar a distintos objetos.

Creamos un nuevo script Variables.groovy y pongamos el siguiente código:

package com.dosideas.groovy

//definimos una variable. Se inicializan en null
def y
println y

//no es necesario usar el keyword "def"
x = 1
println x

//la misma variable puede tener distintos tipos de datos
x = false
println x

x = -3.1499392
println x

//podemos asignarle un objeto Java, en este caso una instancia de Date
x = new java.util.Date()
println x

//un String
x = "Hi"
println x

//podemos referenciar a variables dentro de un String, con el signo $
println "hola, $x"

Como vemos, las variables en Groovy son versátiles, y pueden referenciar a distintos tipos de datos.

Listas y maps

Groovy tiene incorporada sintáxis para la manipulación de listas y maps. Las listas almacenan datos ordenados.

package com.dosideas.groovy

def unaLista = [1776, -1, 33, 99, 0, 928734928763]

println unaLista[0]
println unaLista.size();

def unaListaVacia = []

También es posible crear y utilizar maps:

package com.dosideas.groovy

def unMap = ["Pedro" : "no terminó", "Juan": 99, "Zim":"no terminó"]

//acceder a un elemento con distinta sintáxis
println unMap["Pedro"]
println unMap.Pedro

//asignar un valor
unMap["Luis"] = "Otro valor"
println unMap["Luis"]

//podemos definir un map sin elementos
def unMapVacio = [:]

En ambos casos podemos preguntar por su tamaño:

unaLista.size()
unMap.size()

Expresiones condicionales

Las expresiones condicionales suelen expresarse con bloques "if", que son iguales a los de Java. Por ejemplo:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM) {
 println("Buen día")
} else {
 println("Buenas tardes")
}

Bucles

En Groovy hay varias formas prácticas para recorrer listas.

package com.dosideas.groovy

nombres = ["Zim","Dib","Gaz","Tak"]

//recorriendo en forma "clásica"
for (i=0; i < nombres.size(); i++) {
 println nombres[i]
}

//o incrementando el índice de otra forma
for (i in 0..nombres.size()-1) {
 println nombres[i]
}

//o directamente sabiendo la cantidad de elementos
for (i in 0..3) {
 println nombres[i]
}

//una forma más simple y prolija, sin indice
for (i in nombres) {
 println i
}

//o un bucle que se repite varias veces
4.times { println nombres[it] }

//igual al anterior, pero sobre el tamaño de la colección
nombres.size().times { println nombres[it]}