Sobes.tech
Middle

Programlama bağlamında dekoratör nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Dekoratör, mevcut nesnelere dinamik olarak yeni davranışlar eklemeyi sağlayan bir tasarım desenidir ve bunları yapılarını değiştirmeden "sarmalayıcı nesneler" içine sarar.

Ana ilkeler:

  • Davranışın dinamik eklenmesi: İşlevsellik çalışma zamanında eklenir, statik değil.
  • Müşteri için şeffaflık: Müşteri kodu, dekoratörle etkileşime geçerken orijinal nesneymiş gibi davranır.
  • Esneklik: İstenilen davranışı elde etmek için farklı dekoratörler birleştirilebilir.

Python örneği:

def my_decorator(func):
    def wrapper():
        print("Fonksiyon çağrısından önce")
        func()
        print("Fonksiyon çağrısından sonra")
    return wrapper

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

# Dekoratör uygulanmış fonksiyon çağrısı
say_hello()

Bu örnekte, @my_decorator sözdizimi şekeridir ve say_hello = my_decorator(say_hello) ile eşdeğerdir.

JavaScript örneği:

function logCall(target, key, descriptor) {
    const originalMethod = descriptor.value;
    descriptor.value = function(...args) {
        console.log(`${key} metodunun çağrısı, argümanlar: ${args}`);
        const result = originalMethod.apply(this, args);
        console.log(`${key} metodunun dönüş değeri: ${result}`);
        return result;
    };
    return descriptor;
}

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

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

Burada, @logCall kullanılarak Example sınıfındaki add metoduna logging eklenir.

QA Otomasyon uygulaması:

  • Günlük kaydı: Test adımlarına veya elementlerle etkileşimlere günlük ekleme.
  • İstisna işleme: Fonksiyon çağrılarını sarmalayarak belirli istisnaları işleme.
  • Durum yönetimi: Nesnenin durumunu, metod çağrısından önce veya sonra değiştirme (örneğin, bağlamları değiştirme).
  • Kimlik doğrulama/yetkilendirme: Belirli bir işlemi gerçekleştirmeden önce erişim izinlerini kontrol etme.