Kotlin
Birleştirme
Tüm katmanları birleştirerek çalışan bir uygulama yazarsın.
Birleştirme: Flow ile akış
Son derste tüm parçaları birleştirip Library'ye bir Flow metodu ekleyeceksin. fun bookFlow(): Flow<Book> = listAll().asFlow() kitapları bir akış olarak sunar; collect ile her kitabı tek tek tüketebilirsin. Bu, dosyaya kaydetme ve akış tabanlı tüketimi bir araya getirir.
fun bookFlow(): Flow<Book> = listAll().asFlow()
fun main() = runBlocking {
lib.bookFlow().collect { println(it.format()) }
}
Burada asFlow() bir listeyi akışa çevirir; her eleman sırayla emit edilir. collect her kitabın format çıktısını yazdırır. runBlocking, main'de coroutine köprüsü kurar. Flow, büyük koleksiyonları tembel (lazy) tüketmek için idealdir; tüm liste belleğe yüklenmez.
Tüm parçaları birleştir
Son uygulama şu parçaları birleştirir: data class Book (veri modeli), sealed class Category (OOP hiyerarşi), class Library (koleksiyon yönetimi), save/load (dosya I/O) ve bookFlow (asenkron akış). Her parça önceki derslerde hazırlandı; şimdi hepsi bir arada çalışır.
fun main() = runBlocking {
val lib = Library()
lib.add(Book("Suç ve Ceza", "Dostoyevski", 1866, Fiction))
lib.save("kutuphane.txt")
lib.bookFlow().collect { println(it.format()) }
}
Burada kitap eklenir, dosyaya kaydedilir, ardından Flow ile akışta tüketilir. Bu, orta seviye Kotlin'in tüm temel kavramlarını (OOP, koleksiyonlar, dosya I/O, Flow) birleştiren bir uygulamadır. İleride bu yapıya arama, filtreleme veya kullanıcı arayüzü eklenebilir. Tasarım, her parçanın bağımsız test edilebilmesine olanak tanır.
Uygulama bookFlow ekle ve tüm uygulamayı çalıştır
Hazır koddaki tüm tanımlar hazır (Book, Category, Library, save/load). Sen Library sınıfına fun bookFlow(): Flow<Book> = listAll().asFlow() ekle. main fonksiyonunu fun main() = runBlocking { ... } biçiminde yaz. İçinde val lib = Library() oluştur; iki kitap ekle; lib.save("kutuphane.txt") çağır; lib.bookFlow().collect { println(it.format()) } ile her kitabı yazdır. Gerekli importlar (java.io.File, kotlinx.coroutines.flow.*, kotlinx.coroutines.runBlocking) hazır kodda bulunur.
Örnek çözümü göster
import java.io.File
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.runBlocking
data class Book(val title: String, val author: String, val year: Int, val category: Category) {
fun format(): String = "$title - $author ($year) [${category.label()}]"
}
sealed class Category {
abstract fun label(): String
}
object Fiction : Category() {
override fun label() = "Roman"
}
object NonFiction : Category() {
override fun label() = "İnceleme"
}
class Library {
private val books = mutableListOf<Book>()
fun add(b: Book) { books.add(b) }
fun listAll(): List<Book> = books.toList()
fun save(path: String) {
val content = books.joinToString("\n") { it.format() }
File(path).writeText(content)
}
fun load(path: String): String {
return File(path).readText()
}
fun bookFlow(): Flow<Book> = listAll().asFlow()
}
fun main() = runBlocking {
val lib = Library()
lib.add(Book("Suç ve Ceza", "Dostoyevski", 1866, Fiction))
lib.add(Book("Sapiens", "Harari", 2011, NonFiction))
lib.save("kutuphane.txt")
lib.bookFlow().collect { println(it.format()) }
}
Kendini test et
-
Bu uygulamada Flow ne için kullanılır?
- Dosya sıkıştırma için
- Veri tabanı bağlantısı için
- Kitapları akış olarak sunmak için
- Arayüz çizimi için
Cevabı göster
Kitapları akış olarak sunmak için — Flow, kitapları akış tabanlı tüketmek için kullanılır.
-
Uygulama parçalarını eşle
- data class Book
- Veri modeli
- sealed class Category
- OOP hiyerarşi
- class Library
- Koleksiyon yönetimi
- fun bookFlow
- Asenkron akış
-
Listeyi akışa çevir
fun bookFlow(): Flow<Book> = listAll().____()
Cevabı göster
fun bookFlow(): Flow<Book> = listAll().asFlow()
Sıradaki ders: Orta seviye bölüm sınavı