Sobes.tech
Middle

Cos'è un decoratore nel contesto della programmazione?

sobes.tech AI

Risposta dell'AI

Un decoratore è un pattern di progettazione che permette di aggiungere dinamicamente un nuovo comportamento agli oggetti esistenti, avvolgendoli in speciali "oggetti-imbottitura" senza modificare la loro struttura.

Principi chiave:

  • Aggiunta dinamica di comportamento: La funzionalità viene aggiunta durante l'esecuzione, non staticamente.
  • Trasparenza per il cliente: Il codice del cliente interagisce con il decoratore come se fosse l'oggetto originale.
  • Flessibilità: Permette di combinare diversi decoratori per ottenere il comportamento desiderato.

Esempio in Python:

def my_decorator(func):
    def wrapper():
        print("Prima di chiamare la funzione")
        func()
        print("Dopo aver chiamato la funzione")
    return wrapper

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

# Chiamata della funzione con decoratore applicato
say_hello()

In questo esempio, @my_decorator è uno zucchero sintattico equivalente a say_hello = my_decorator(say_hello).

Esempio in JavaScript:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Chiamata al metodo ${key} con argomenti: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`Il metodo ${key} ha restituito: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Qui, @logCall viene usato per aggiungere il logging al metodo add della classe Example.

Applicazione in QA Automation:

  • Logging: Aggiunta di logging ai passaggi di test o alle interazioni con gli elementi.
  • Gestione delle eccezioni: Avvolgimento delle chiamate di funzione per gestire eccezioni specifiche.
  • Gestione dello stato: Modifica dello stato dell'oggetto prima o dopo la chiamata ai suoi metodi (ad esempio, cambio di contesto).
  • Autenticazione/autorizzazione: Verifica dei permessi prima di eseguire un'azione specifica.