Flow
- Kotlin kursu
- Orta seviye
- Ders 88/116
- 5 dk
Flow ile soğuk akış kavramını öğrenirsin.
Flow: Soğuk akış
Flow, Kotlin'de zamanla değer üreten soğuk (cold) bir asenkron akıştır. Soğuk derken: akış, bir tüketici collect çağırana kadar değer üretmez. Bu, sıcak kanallardan (hot channel) farklıdır; sıcak kanal tüketici olmasa da üretir.
Flow, kotlinx.coroutines.flow paketindedir. En basit kurucu flowOf(1, 2, 3) ile sabit değerli bir akış oluşturur. Akışı tüketmek için collect { ... } kullanılır; her değer için lambda çalışır. collect bir suspend fonksiyondur, bu yüzden runBlocking gibi bir coroutine bağlamında çağrılır.
flowOf kurucusu
flowOf en basit Flow kurucusudur: verilen değerlerle sabit bir akış oluşturur. Bir Iterable veya Sequence'u akışa çevirmek için .asFlow() kullanılır.
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
fun numbers(): Flow<Int> = flowOf(1, 2, 3)
fun main() = runBlocking {
numbers().collect { println(it)
}
}Çıktı: 1, 2, 3 satır satır. Akış soğuk olduğu için numbers() çağrısı tek başına değer üretmez; collect çağrılınca değerler sırayla emit edilir.
Uygulama Basit bir Flow tanımla ve tüket
fun numbers(): Flow<Int> = flowOf(1, 2, 3) tanımla. main fonksiyonunu runBlocking ile işaretle; içinde numbers().collect { println(it) } çağrısı yapsın. Çıktı her değeri ayrı satırda yazdırır.
Başlangıç kodu
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
// numbers fonksiyonu: 1, 2, 3 değerleriyle Flow<Int> döndürsün
// main: runBlocking bloğu içinde numbers akışını topla ve yazdır
fun main() = runBlocking {
// buraya yaz
}Örnek çözüm
fun numbers(): Flow<Int> = flowOf(1, 2, 3)
fun main() = runBlocking {
numbers().collect { println(it) }
}Beklenen çıktı
1 2 3
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Flow hangi türde bir akıştır?
- Senkron bir liste
- Sıcak bir yayın kanalı
- Soğuk bir asenkron değer akışı Doğru cevap
- Tek değer döndüren fonksiyon
Açıklama: Flow soğuk bir asenkron akıştır; collect çağrılınca değer üretir.
2 Dönüş türünü tamamla
fun numbers(): ____ = flowOf(1, 2, 3)
fun numbers(): Flow<Int> = flowOf(1, 2, 3)
Açıklama: Flow<Int> akışın değer türünü belirtir.
3 Flow parçalarını eşle
| Kavram | Anlamı |
|---|---|
flow |
Akış |
cold |
Soğuk (collect tetikler) |
collect |
Tüketici |
flowOf |
Sabit değerli kurucu |