Middle
Qu'est-ce qu'un décorateur dans le contexte de la programmation?
sobes.tech IA
Réponse de l'IA
Un décorateur est un patron de conception qui permet d’ajouter dynamiquement un comportement nouveau à des objets existants, en les enveloppant dans des "objets-emballages" spéciaux sans modifier leur structure.
Principes clés:
- Ajout dynamique de comportement: La fonctionnalité est ajoutée en temps d’exécution, pas statiquement.
- Transparence pour le client: Le code client interagit avec le décorateur comme s’il s’agissait de l’objet original.
- Flexibilité: Permet de combiner différents décorateurs pour atteindre le comportement souhaité.
Exemple en Python:
def my_decorator(func):
def wrapper():
print("Avant l’appel de la fonction")
func()
print("Après l’appel de la fonction")
return wrapper
@my_decorator
def say_hello():
print("Bonjour!")
# Appel de la fonction avec décorateur
say_hello()
Dans cet exemple, @my_decorator est un sucre syntaxique équivalent à say_hello = my_decorator(say_hello).
Exemple en JavaScript:
function logCall(target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Appel de la méthode ${key} avec arguments: ${args}`);
const result = originalMethod.apply(this, args);
console.log(`La méthode ${key} a retourné: ${result}`);
return result;
};
return descriptor;
}
class Example {
@logCall
add(a, b) {
return a + b;
}
}
const instance = new Example();
instance.add(2, 3);
Ici, @logCall est utilisé pour ajouter un logging à la méthode add de la classe Example.
Application en QA Automation:
- Logging: Ajout de logs aux étapes de tests ou interactions avec des éléments.
- Gestion des exceptions: Envelopper les appels de fonctions pour gérer des exceptions spécifiques.
- Gestion d’état: Modifier l’état de l’objet avant ou après l’appel de ses méthodes (par exemple, changer de contexte).
- Authentification/autorisation: Vérifier les droits d’accès avant d’effectuer une action spécifique.