Sobes.tech
Middle

Co je to dekorátor v kontextu programování?

sobes.tech AI

Odpověď od AI

Dekorátor je návrhový vzor, ktorý umožňuje dynamicky pridávať nové správanie existujúcim objektom tak, že ich obalí do špeciálnych "obalových objektov" bez zmeny ich štruktúry.

Kľúčové princípy:

  • Dynamické pridávanie správania: Funkcionalita sa pridáva počas behu, nie staticky.
  • Priehľadnosť pre klienta: Klientsky kód komunikuje s dekorátorom, akoby to bol pôvodný objekt.
  • Flexibilita: Umožňuje kombinovať rôzne dekorátory na dosiahnutie požadovaného správania.

Príklad v Pythone:

def my_decorator(func):
    def wrapper():
        print("Pred volaním funkcie")
        func()
        print("Po volaní funkcie")
    return wrapper

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

# Volanie funkcie s dekorátorom
say_hello()

V tomto príklade je @my_decorator syntaktický cukor, ktorý je ekvivalentný s say_hello = my_decorator(say_hello).

Príklad v JavaScripte:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Volanie metódy ${key} s argumentmi: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`Metóda ${key} vrátila: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Tu sa @logCall používa na pridanie logovania k metóde add triedy Example.

Použitie v QA Automation:

  • Logovanie: Pridanie logovania k testovacím krokom alebo interakciám s prvkami.
  • Spracovanie výnimiek: Obalenie volaní funkcií na spracovanie špecifických výnimiek.
  • Správa stavu: Zmena stavu objektu pred alebo po volaní jeho metód (napríklad prepínanie kontextov).
  • Autentifikácia/autorizácia: Kontrola oprávnení pred vykonaním určitej akcie.