Sobes.tech
Middle

Proqramlaşdırma kontekstində dekorator nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Dekorator — bu dizayn naxshi bo‘lib, mavjud ob’ektlarga dinamik tarzda yangi xususiyatlar qo‘shishga imkon beradi va ularni maxsus "qoplamalar ob’ektlari" ga o‘rab, ularning tuzilmasini o‘zgartirmasdan ishlaydi.

Asosiy tamoyillar:

  • Dinamik xususiyat qo‘shish: Funktsionallik ish vaqtida qo‘shiladi, statik emas.
  • Mijoz uchun shaffoflik: Mijoz kodi dekorator bilan original ob’ekt kabi o‘zaro aloqada bo‘ladi.
  • Moslashuvchanlik: Turli dekoratorlarni birlashtirish orqali kerakli xususiyatga erishish mumkin.

Python misoli:

def my_decorator(func):
    def wrapper():
        print("Funktsiya chaqirilishidan oldin")
        func()
        print("Funktsiya chaqirilgandan keyin")
    return wrapper

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

# Dekorator bilan chaqirilgan funksiya
say_hello()

Bu misolda, @my_decorator sintaktik shakar bo‘lib, say_hello = my_decorator(say_hello) ga teng.

JavaScript misoli:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`${key} metod chaqirilishi, argumentlar: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`${key} metod natijasi: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Bu yerda, @logCall Example sinfidagi add metodiga log yozishni qo‘shish uchun ishlatiladi.

QA Automationda qo‘llanilishi:

  • Log yozish: Test bosqichlariga yoki elementlar bilan o‘zaro aloqalarga log yozishni qo‘shish.
  • Xatoliklarni boshqarish: Funksiya chaqiruvlarini sarmoya qilish orqali maxsus xatoliklarni boshqarish.
  • Holatni boshqarish: Ob’ekt holatini uning metodlarini chaqirishdan oldin yoki keyin o‘zgartirish (masalan, kontekstlarni almashtirish).
  • Autentifikatsiya/avtorizatsiya: Maxsus harakatdan oldin kirish huquqlarini tekshirish.