Sobes.tech
Middle

O que é um decorador no contexto da programação?

sobes.tech IA

Resposta da IA

Um decorador é um padrão de projeto que permite adicionar dinamicamente um novo comportamento a objetos existentes, envolvendo-os em "objetos-embalagem" especiais sem alterar sua estrutura.

Princípios-chave:

  • Adição dinâmica de comportamento: Funcionalidade é adicionada em tempo de execução, não de forma estática.
  • Transparência para o cliente: O código do cliente interage com o decorador como se fosse o objeto original.
  • Flexibilidade: Permite combinar diferentes decoradores para alcançar o comportamento desejado.

Exemplo em Python:

def my_decorator(func):
    def wrapper():
        print("Antes de chamar a função")
        func()
        print("Depois de chamar a função")
    return wrapper

@my_decorator
def say_hello():
    print("Olá!")

# Chamada da função com decorador aplicado
say_hello()

Neste exemplo, @my_decorator é açúcar sintático equivalente a say_hello = my_decorator(say_hello).

Exemplo em JavaScript:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Chamada do método ${key} com argumentos: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`O método ${key} retornou: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Aqui, @logCall é usado para adicionar logging ao método add da classe Example.

Aplicação em QA Automation:

  • Logging: Adição de logs às etapas de testes ou interações com elementos.
  • Tratamento de exceções: Envolver chamadas de funções para tratar exceções específicas.
  • Gerenciamento de estado: Alterar o estado do objeto antes ou depois de chamar seus métodos (por exemplo, alternar contextos).
  • Autenticação/autorização: Verificar permissões antes de executar uma ação específica.