Sobes.tech
Middle+

JavaScript'teki Observable nesnesi hangi veri yapısına benziyor?

sobes.tech yapay zeka

AI'dan gelen yanıt

Veri yapısı Soğuk Observable (İngilizce Cold Observable), reaktif programlamadan bir kavramdır (örneğin, RxJS kütüphanesinde).

Ana benzerlikler:

  • Tembel doğa: Bir Observable, yalnızca abone olduğunda değerleri yaymaya başlar. Abone olmadan, Observable aktif değildir.
  • Birden fazla abone, bağımsız akışlar: Her yeni abone, diğerlerinden bağımsız olarak en baştan tam değer kümesini alır. Bu, her abone için bağımsız veri akışları oluşturur.

Soğuk observable yapısına örnek (kavramsal):

// Bir "değer üreteci" olduğunu düşünün
function generateValues() {
  let i = 0;
  return {
    // Bir sonraki değeri döndüren metod
    next: function() {
      return { value: i++, done: false };
    }
  };
}

// "Observable" - esasen, sadece bir fonksiyon, aboneyi kabul eder
function coldObservableExample(subscriber) {
  const generator = generateValues();

  // Değerlerin yayılmasını taklit etme
  setTimeout(() => {
    subscriber.next(generator.next().value);
  }, 100);

  setTimeout(() => {
    subscriber.next(generator.next().value);
  }, 200);

  setTimeout(() => {
    subscriber.complete(); // Akışın sonu
  }, 300);

  // Abonelik nesnesi döndürür (iptal etmek için)
  return {
    unsubscribe: () => {
      console.log('İptal');
      // Burada generator/ zamanlayıcıların durdurulmasıyla ilgili mantık olabilir
    }
  };
}

// Abone 1
const subscription1 = coldObservableExample({
  next: (value) => console.log('Abone 1 aldı:', value),
  error: (err) => console.error('Hata 1:', err),
  complete: () => console.log('Abone 1 tamamlandı')
});

// Abone 2 (başlangıçtan itibaren değerleri almaya başlayacak)
setTimeout(() => {
  const subscription2 = coldObservableExample({
    next: (value) => console.log('Abone 2 aldı:', value),
    error: (err) => console.error('Hata 2:', err),
    complete: () => console.log('Abone 2 tamamlandı')
  });
}, 150);

// İlk abonenin iptali
setTimeout(() => {
  subscription1.unsubscribe();
}, 250);

Sıcak Observable (Hot Observable) ile karşılaştırıldığında, bu yapı değerleri hemen yaymaya başlar, abone olsalar da olmasalar da, ve tüm aboneler abone oldukları andan itibaren değerleri alır. Soğuk Observable, her yeni abone için tam veri akışını saklar ve yeniden oynatır. Bu özellik, onu JavaScript'teki Observable (RxJS ve benzeri kütüphaneler bağlamında) kavramına yaklaştırır.

Karşılaştırma (basitleştirilmiş):

Özellik Soğuk Observable Sıcak Observable
Başlangıç Abone olunduğunda Hemen
Aboneler için akış Her biri için tam akış Abone olunduğu andan itibaren değerler
Kullanım HTTP istekleri, dosya okuma, yineleme DOM olayları, web soketleri, zamanlayıcılar