Eğer Kotlin'de veri akışlarını yönetmek için çalışıyorsanız, büyük ihtimalle SharedFlow
ve Channel
gibi kavramlarla karşılaşmışsınızdır. İlk bakışta bu ikisi benzer görünse de,
aslında oldukça farklı kullanım alanlarına sahiptirler. Gelin daha detaylı bir göz atalım!
1. SharedFlow
Nedir?
SharedFlow
, Kotlin'in modern veri akış mekanizmalarından biridir. Temel amacı, birden fazla gözlemciye (collector) aynı anda veri gönderebilmektir. Bu yüzden SharedFlow
, broadcasting (yayın) yapabilen bir veri akışı olarak düşünülebilir.
🧠 SharedFlow Nasıl Çalışır?
- Hot Stream: Veriler, bir gözlemci (collector) olsa da olmasa da yayılmaya devam eder.
- Replay desteği vardır: Daha önce yayılan verilerin bir kısmını yeni gözlemcilere tekrar gönderebilir.
- Aynı anda birden fazla gözlemci verileri dinleyebilir.
LiveData
'ya benzer ama Coroutine tabanlı olduğu için daha performanslıdır ve daha esnektir.
✨ Ne Zaman Kullanılır?
SharedFlow
, özellikle şu durumlarda kullanılır:
- Birden fazla UI bileşenine aynı anda veri göndermek istiyorsanız. Örneğin, kullanıcı tıklamaları, hata mesajları veya uygulama durum değişikliklerini paylaşmak için.
- ViewModel içinde olayları (
events
) veya durumları (states
) paylaşmak için.
🎯 SharedFlow Örneği
Diyelim ki bir kullanıcı tıklama olayını tüm dinleyicilere iletmek istiyoruz:
ViewModel:
UI Katmanı:
Burada sendEvent
çağrıldığında, tüm gözlemciler (collector) bu olayı alacaktır. Replay özelliği sayesinde, yeni bir gözlemci eklendiğinde geçmişteki olayları da görebilir.
2. Channel
Nedir?
Channel
, iki coroutine arasında point-to-point (nokta atışı) iletişim sağlayan bir veri yapısıdır. Bir üretici (producer) veri gönderir, bir tüketici (consumer) bu veriyi alır. Ancak bir fark var: Channel
, aynı anda sadece bir tüketiciye veri gönderir.
🧠 Channel Nasıl Çalışır?
- Cold Stream: Veriler yalnızca bir alıcı (receiver) olduğunda gönderilir.
- Her bir veri, yalnızca tek bir alıcıya teslim edilir. Eğer birden fazla alıcı varsa, hangisinin veriyi alacağını bilmiyoruz.
- Buffer özelliği vardır: Veriler belirli bir tampon (buffer) dolana kadar saklanabilir. Ancak tampon dolduğunda, yeni veri gönderme bekletilir ya da eski veriler kaybolur.
✨ Ne Zaman Kullanılır?
- İki coroutine arasında veri alışverişi yapmak istediğinizde.
- Üretici-tüketici modellerinde (Producer-Consumer) veri akışı sağlamak için.
🎯 Channel Örneği
Şimdi bir Channel
ile nasıl çalışıldığını görelim:
Channel Tanımlama ve Veri Gönderme:
Çıktı:
Burada, Producer
veriyi gönderiyor, Consumer
ise bu veriyi alıyor. for
döngüsü sayesinde kanal kapanana kadar tüm mesajları alıyoruz.
3. SharedFlow ve Channel Arasındaki Farklar
4. Hangi Durumda Hangisini Kullanmalıyım?
Birden fazla gözlemciye aynı anda veri göndermeniz gerekiyorsa: SharedFlow
kullanabilirsiniz.
İki coroutine arasında nokta atışı bir iletişim gerekiyorsa: Channel` tercih edebilirsiniz.
🎉 Sonuç
Kotlin'de hem SharedFlow
hem de Channel
, farklı ihtiyaçlara göre tasarlanmış güçlü araçlardır. Eğer bir uygulamanın UI tarafında olay paylaşımı yapmanız gerekiyorsa, SharedFlow
modern ve
esnek bir çözüm sunar. Ancak daha düşük seviyede, coroutine'ler arasında veri paylaşımı gerekiyorsa, Channel
sizin için daha uygun olacaktır.
Umarım sizler için faydalı bir makale olmuştur.
Güvenli kodlamalar!