CodeBlanks Logo Icon CodeBlanks

Flow

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

Main.kt
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

Main.kt
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

Soru
fun numbers(): ____ = flowOf(1, 2, 3)
Cevap
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

Orta seviye bölümündeki tüm dersler