CodeBlanks Logo Icon CodeBlanks

flow builder

flow { } ile Flow oluşturmayı öğrenirsin.

flow { } kurucusu

flow { ... } kurucusu, akışı buyurgan (imperative) biçimde kurmanı sağlar. Gövde içine normal Kotlin kodu yazarsın; emit(value) her değeri tüketiciye gönderir.

fun counter(): Flow<Int> = flow {
    for (i in 1..3) {
        emit(i)
    }
}

Burada döngü her döndüğünde emit(i) çağrılır ve değer collect'e iletilir. emit bir suspend fonksiyondur; tüketici hazır olana kadar bekler. Bu yüzden akış sıralıdır: bir sonraki emit ancak tüketici işini bitirince çalışır.

emit ve sıralı çalışma

Akış gövdesi, tüketiciyle sıralı (sequential) çalışır. Her emit çağrısında akış durur; collect lambda'sı çalışır, bitince akış devam eder. Yani emit ve collect birbiriyle el sıkışır (handshake).

flow {
    emit("a")
    println("gövde")
}.collect { println(it) }

Çıktı sırası: a, gövde. Önce emit("a") collect'e gider, lambda yazdırır, sonra emit döner ve gövde devam eder. Bu, akışın soğuk ve sıralı doğasının sonucudur.

Uygulama flow builder ile sayı akışı kur

fun counter(): Flow<Int> = flow { ... } tanımla. Gövdede for (i in 1..3) döngüsü ile her i değerini emit(i) ile gönder. main'i runBlocking ile işaretle; içinde counter().collect { println(it) } çağrısı yapsın.

Başlangıç kodu

Main.kt
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking

// counter fonksiyonu: flow { } içinde 1, 2, 3 değerlerini emit etsin
// main: runBlocking içinde counter akışını topla ve yazdır
fun main() = runBlocking {
    // buraya yaz
}

Örnek çözüm

Main.kt
fun counter(): Flow<Int> = flow {
    for (i in 1..3) {
        emit(i)
    }
}

fun main() = runBlocking {
    counter().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 Değer gönderme

Soru
fun counter(): Flow<Int> = flow {
    for (i in 1..3) {
        ____(i)
    }
}
Cevap
fun counter(): Flow<Int> = flow {
    for (i in 1..3) {
        emit(i)
    }
}

Açıklama: emit, flow gövdesinde değer gönderir.

2 flow builder parçalarını eşle

Kavram Anlamı
flow { } Akış kurucu
emit(value) Değer gönderir
for (i in 1..3) Döngü
Flow<Int> Dönüş türü

3 flow { } gövdesinde tüketiciye değer gönderen fonksiyon hangisidir?

  • return
  • yield
  • send
  • emit Doğru cevap

Açıklama: emit, flow gövdesinde değer gönderen suspend fonksiyondur.

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