Sobes.tech
Middle

Ի՞նչ է դեկորատորը ծրագրավորման համատեքստում։

sobes.tech AI

Պատասխան AI-ից

Դեկորատորը՝ դա նախագծման ձևանիշ է, որը թույլ է տալիս դինամիկորեն ավելացնել նոր վարքագիծ առկա օբյեկտներին՝ դրանք շրջապատելով հատուկ "շրջանակային օբյեկտներով"՝ առանց նրանց կառուցվածքը փոխելու:

Հիմնական սկզբունքները:

  • Դինամիկ վարքագծի ավելացում: Ֆունկցիոնալությունը ավելացվում է գործարկման ժամանակ, ոչ թե ստատիկորեն:
  • Հաճախորդի համար թափանցիկություն: Հաճախորդի կոդը փոխազդում է դեկորատորին, կարծես դա բնօրինակը օբյեկտն է:
  • Կնքվածություն: Позволяет комбинировать различные декораторы для достижения нужного поведения.

Python-ում օրինակ:

def my_decorator(func):
    def wrapper():
        print("Նախքան ֆունկցիայի կանչը")
        func()
        print("Հետո ֆունկցիայի կանչից")
    return wrapper

@my_decorator
def say_hello():
    print("Բարև!")

# Ֆունկցիայի կանչը դեկորատորով
say_hello()

Այս օրինակով @my_decorator սինտաքսային շաքարավազ է, որը հավասար է say_hello = my_decorator(say_hello):

JavaScript-ում օրինակ:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`Կատարման կոչ ${key} հետ պարամետրերով: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`Կատարման արդյունքը ${key} վերադարձավ: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Այստեղ @logCall օգտագործվում է add մեթոդի համար լոգավորման ավելացման համար:

QA ավտոմատացման կիրառում:

  • Լոգավորում: Լոգավորման ավելացում թեստերի քայլերին կամ տարրերի հետ փոխազդեցություններին:
  • Անհատականացման կառավարում: Ֆունկցիաների կանչերի շրջապատում հատուկ արտահայտությունների մշակման համար:
  • Կարգավիճակի կառավարում: Օբյեկտի վիճակի փոփոխություն՝ նրա մեթոդների կանչից առաջ կամ հետո (օրինակ՝ կոնտեքստների փոխում):
  • Հավաստագրում/իրազեկում: Հասանելիության իրավունքների ստուգում՝ որոշ գործողություններ կատարելուց առաջ։