flow builder
- Kotlin kursu
- Orta seviye
- Ders 89/116
- 5 dk
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
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
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
fun counter(): Flow<Int> = flow {
for (i in 1..3) {
____(i)
}
}
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.