Sobes.tech
Middle

Ce este un decorator în contextul programării?

sobes.tech AI

Răspuns de la AI

Un decorator este un model de proiectare care permite adăugarea dinamică a unui comportament nou obiectelor existente, învelindu-le în "obiecte-ambalaj" speciale fără a modifica structura acestora.

Principii cheie:

  • Adăugare dinamică de comportament: Funcționalitatea este adăugată în timpul execuției, nu static.
  • Transparență pentru client: Codul client interacționează cu decoratorul ca și cum ar fi obiectul original.
  • Flexibilitate: Permite combinarea diferiților decoratori pentru a obține comportamentul dorit.

Exemplu în Python:

def my_decorator(func):
    def wrapper():
        print("Înainte de apelarea funcției")
        func()
        print("După apelarea funcției")
    return wrapper

@my_decorator
def say_hello():
    print("Salut!")

# Apelarea funcției cu decorator
say_hello()

În acest exemplu, @my_decorator este zahăr sintactic echivalent cu say_hello = my_decorator(say_hello).

Exemplu în JavaScript:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Apelare metodă ${key} cu argumente: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`Metoda ${key} a returnat: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Aici, @logCall este folosit pentru a adăuga logare metodei add a clasei Example.

Aplicare în QA Automation:

  • Logare: Adăugarea de logare la pașii testelor sau interacțiunile cu elementele.
  • Gestionarea excepțiilor: Împachetarea apelurilor de funcții pentru gestionarea excepțiilor specifice.
  • Gestionarea stării: Modificarea stării obiectului înainte sau după apelarea metodelor sale (de exemplu, schimbarea contextelor).
  • Autentificare/autorizare: Verificarea drepturilor de acces înainte de a executa o anumită acțiune.