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 |