Sobes.tech
Middle

¿Qué es un decorador en el contexto de la programación?

sobes.tech AI

Respuesta de la IA

El decorador es un patrón de diseño que permite agregar dinámicamente un comportamiento nuevo a objetos existentes, envolviéndolos en "objetos envoltorios" especiales sin modificar su estructura.

Principios clave:

  • Adición dinámica de comportamiento: La funcionalidad se añade en tiempo de ejecución, no de forma estática.
  • Transparencia para el cliente: El código del cliente interactúa con el decorador como si fuera el objeto original.
  • Flexibilidad: Permite combinar diferentes decoradores para lograr el comportamiento deseado.

Ejemplo en Python:

def my_decorator(func):
    def wrapper():
        print("Antes de llamar a la función")
        func()
        print("Después de llamar a la función")
    return wrapper

@my_decorator
def say_hello():
    print("¡Hola!")

# Llamada a la función con decorador aplicado
say_hello()

En este ejemplo, @my_decorator es azúcar sintáctico equivalente a say_hello = my_decorator(say_hello).

Ejemplo en JavaScript:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Llamada al método ${key} con argumentos: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`El método ${key} devolvió: ${result}`);
        return result;
    };
    return descriptor;
}

class Example {
    @logCall
    add(a, b) {
        return a + b;
    }
}

const instance = new Example();
instance.add(2, 3);

Aquí, @logCall se usa para agregar registro a método add de la clase Example.

Aplicación en QA Automation:

  • Registro: Agregar registros a pasos de pruebas o interacciones con elementos.
  • Manejo de excepciones: Envolver llamadas a funciones para manejar excepciones específicas.
  • Gestión de estado: Cambiar el estado del objeto antes o después de llamar a sus métodos (por ejemplo, cambiar contextos).
  • Autenticación/autorización: Verificar permisos antes de realizar una acción específica.