CodeBlanks Logo Icon CodeBlanks

Özet - Flow temelleri

flow, collect ve map'i birleştirerek bir olay akışı yazarsın.

Özet - Flow temelleri

Bu grupta Flow'un soğuk akış doğasını, flow { } kurucusu ve emit'i, collect terminal operatörünü, map/filter ara operatörlerini ve flowOn ile bağlam değiştirmeyi öğrendin.

Şimdi bunları birleştireceksin: bir akış kurup map ile dönüştürecek, ardından filter ve flowOf'u zincirleyeceksin. Bu yapı, Kotlin'de asenkron veri akışının temelidir. İleride StateFlow, SharedFlow ve kanal tabanlı sıcak akışlar bu temelin üzerine eklenecek.

Uygulama flow builder ve map zinciri

fun doubled(): Flow<Int> = flow { ... }.map { ... } tanımla. Gövdede for (i in 1..5) ile emit(i) yapsın; ardından .map { it * 2 } uygulasın. main'i runBlocking ile işaretle; içinde doubled().collect { println(it) } çağrısı yapsın.

Başlangıç kodu

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

// doubled fonksiyonu: flow { } ile 1..5 değerlerini emit et, her değeri ikiyle çarp
// main: doubled akışını topla ve yazdır
fun main() = runBlocking {
    // buraya yaz
}

Örnek çözüm

Main.kt
fun doubled(): Flow<Int> = flow {
    for (i in 1..5) {
        emit(i)
    }
}.map { it * 2 }

fun main() = runBlocking {
    doubled().collect { println(it) }
}

Beklenen çıktı

2
4
6
8
10

Uygulama filter ve map ile kareler

fun squares(): Flow<Int> = flowOf(...).filter { ... }.map { ... } tanımla. flowOf(1, 2, 3, 4, 5) ile akışı kur; .filter { it % 2 == 0 } ile çiftleri süz; .map { it * it } ile karelerini al. main'i runBlocking ile işaretle; içinde squares().collect { println(it) } çağrısı yapsın.

Başlangıç kodu

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

// squares fonksiyonu: flowOf ile akış kur, çiftleri süz ve karelerini al
// main: squares akışını topla ve yazdır
fun main() = runBlocking {
    // buraya yaz
}

Örnek çözüm

Main.kt
fun squares(): Flow<Int> = flowOf(1, 2, 3, 4, 5)
    .filter { it % 2 == 0 }
    .map { it * it }

fun main() = runBlocking {
    squares().collect { println(it) }
}

Beklenen çıktı

4
16

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Aşağıdakilerden hangisi bir terminal operatördür?

  • map
  • filter
  • flowOn
  • collect Doğru cevap

Açıklama: collect terminal'dir; akışı çalıştırır ve değerleri tüketir.

2 Flow kavramlarını eşle

Kavram Anlamı
flow { } Akış kurucu
emit Değer gönderir
collect Tüketici
flowOn Bağlam belirler

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