Middle
Wat is een decorator in de context van programmeren?
sobes.tech AI
Antwoord van AI
Een decorator is een ontwerppatroon dat het mogelijk maakt om dynamisch nieuw gedrag toe te voegen aan bestaande objecten door ze te omhullen in speciale "omslagobjecten" zonder hun structuur te wijzigen.
Belangrijke principes:
- Dynamische toevoeging van gedrag: Functionaliteit wordt tijdens runtime toegevoegd, niet statisch.
- Transparantie voor de klant: De code van de klant werkt met de decorator alsof het het originele object is.
- Flexibiliteit: Het combineren van verschillende decorators om het gewenste gedrag te bereiken.
Voorbeeld in Python:
def my_decorator(func):
def wrapper():
print("Voor het aanroepen van de functie")
func()
print("Na het aanroepen van de functie")
return wrapper
@my_decorator
def say_hello():
print("Hallo!")
# Aanroep van de functie met decorator
say_hello()
In dit voorbeeld is @my_decorator syntactisch suiker dat gelijk is aan say_hello = my_decorator(say_hello).
Voorbeeld in JavaScript:
function logCall(target, key, descriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args) {
console.log(`Aanroep van methode ${key} met argumenten: ${args}`);
const result = originalMethod.apply(this, args);
console.log(`Methode ${key} heeft geretourneerd: ${result}`);
return result;
};
return descriptor;
}
class Example {
@logCall
add(a, b) {
return a + b;
}
}
const instance = new Example();
instance.add(2, 3);
Hier wordt @logCall gebruikt om logging toe te voegen aan de add methode van de Example klasse.
Toepassing in QA Automation:
- Logging: Toevoegen van logging aan teststappen of interacties met elementen.
- Foutafhandeling: Wrappen van functieaanroepen om specifieke uitzonderingen af te handelen.
- Statusbeheer: Veranderen van de status van het object voor of na het aanroepen van zijn methoden (bijvoorbeeld contextwisselingen).
- Authenticatie/autorisatie: Controleren van toegangsrechten voordat een bepaalde actie wordt uitgevoerd.