Una de las principales ventajas de Groovy es el uso implícito de getters/setters para el acceso y escritura de variables; y la generación durante la compilación, de getters/setters para todos los atributos de nuestras clases.

Con un par de ejemplos se ve más claro: si tenemos una clase con dos atributos:

class Persona { 
    String nombre 
    int edad 
}

El compilador de Groovy va a generar automáticamente los setters y los getters correspondientes, quedando la clase como si hubiera sido codificada así en Java:

public class Persona { 
    private String nombre; 
    private int edad; 
    public String getNombre() { return nombre; } 
    public setNombre(String nombre) { this.nombre = nombre; } 
    public int getEdad() { return edad; } 
    public setEdad(int edad) { this.edad = edad; } 
}

Por otro lado, cuando accedemos a una variable desde Groovy, estamos usando implícitamente los getters y setters, de manera que el siguiente código Groovy:

def valor = miedad 
persona.nombre = valor

Sería el equivalente a esto:

def valor = getMiedad() 
getPersona().setNombre(valor)

Es decir, cualquier acceso a una variable que no exista en el contexto actual, o cualquier acceso a un atributo de un objeto, se transforma en un get/set (para saltarse esto, es necesario utilizar el operador "Java field" de la siguiente manera: persona.@nombre = valor)

Estos dos características nos permiten añadir, por ejemplo, nuevas variables en nuestros controladores cuyos valores se carguen de base de datos o de la sesión (o de los dos sitios). Por ejemplo, supongamos que tenemos un controlador que requiere en cada petición la lectura de base de datos del usuario y de una factura:

class EjemploController { 
  def index = { 
    def usuario = Usuario.get(session.miusuario) // Se supone que durante el login, se carga el valor miusuario en la sesion 
    usuario.accesos = usuario.accesos + 1 
    usuario.save() 
    def factura = Factura.findByUsuarioAndFecha(usuario, new Date()) 
    sendEmailAviso(factura.importe, usuario.email) 
    ... 
  } 
}

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Suscríbete