Sobes.tech
Middle

Mi az a dekorátor a programozás kontextusában?

sobes.tech MI

Válasz az MI-től

A dekorátor egy tervezési minta, amely lehetővé teszi, hogy dinamikusan új viselkedést adjunk meglévő objektumokhoz, speciális "burkoló objektumok" segítségével anélkül, hogy megváltoztatnánk azok szerkezetét.

Fő elvek:

  • Dinamikus viselkedés hozzáadása: A funkcionalitás futás közben adódik hozzá, nem statikusan.
  • Átláthatóság a kliens számára: A klienskód úgy lép kapcsolatba a dekorátorral, mintha az az eredeti objektum lenne.
  • Rugalmasság: Különböző dekorátorok kombinálásával elérhető a kívánt viselkedés.

Python példa:

def my_decorator(func):
    def wrapper():
        print("A függvény hívása előtt")
        func()
        print("A függvény hívása után")
    return wrapper

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

# Dekorátorral hívott függvény
say_hello()

Ebben a példában az @my_decorator szintaktikai cukor, ami megegyezik azzal, mint say_hello = my_decorator(say_hello).

JavaScript példa:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Metódus ${key} hívása argumentumokkal: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`A ${key} metódus eredménye: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Itt a @logCall a add metódushoz ad hozzá naplózást.

QA Automatizálásban való alkalmazás:

  • Naplózás: Napló hozzáadása tesztlépésekhez vagy elemekkel való interakciókhoz.
  • Kivételkezelés: Függvényhívások köré csomagolás, hogy kezelje a speciális kivételeket.
  • Állapotkezelés: Az objektum állapotának módosítása a metódusok hívása előtt vagy után (pl. kontextusok váltása).
  • Hitelesítés/jogosultság: Jogosultságok ellenőrzése, mielőtt egy adott műveletet végrehajtanánk.