Kotlin
Koleksiyonlar
List, Map ve Flow ile veri süzme yazarsın.
Library: Koleksiyon yönetimi
Bu ders, kitapları bir koleksiyonda tutan Library sınıfını tanımlar. İçinde private val books = mutableListOf<Book>() bulunur; add metodu ekler, listAll metodu kitapların bir kopyasını liste olarak döndürür. Böylece kitaplar tek bir yerden yönetilir.
class Library {
private val books = mutableListOf<Book>()
fun add(b: Book) { books.add(b) }
fun listAll(): List<Book> = books.toList()
}
mutableListOf değiştirilebilir bir liste oluşturur; add sona ekler. toList() listenin değiştirilemez bir kopyasını döndürür; bu, dışarıdan listenin bozulmasını engeller. Kapsülleme (encapsulation) ilkesine göre books private tutulur; erişim metotlar üzerinden yapılır.
Kapsülleme ve erişim
books alanı private olarak tutulur; dışarıdan doğrudan erişilemez. Bu, kapsülleme (encapsulation) ilkesidir: iç temsil gizli, erişim metotlarla sınırlıdır. listAll, listenin bir kopyasını döndürdüğü için dış kod orijinal listeyi bozamaz.
val lib = Library()
lib.add(Book("Suç ve Ceza", "Dostoyevski", 1866, Fiction))
for (b in lib.listAll()) {
println(b.format())
}
Burada kitap eklenir ve listAll ile döngüde gezilir. Dış kod lib.books'a erişemez (private); yalnızca add ve listAll kullanabilir. Bu, Library'nin iç tutararlılığını korur. İleride remove veya findByAuthor gibi metotlar eklenebilir.
Uygulama Library sınıfı tanımla ve kullan
Hazır koddaki Book ve Category tanımları hazır. Sen class Library tanımla. İçinde private val books = mutableListOf<Book>() olsun. fun add(b: Book) metodu books.add(b) yapsın. fun listAll(): List<Book> = books.toList() olsun. main içinde val lib = Library() oluştur; iki kitap ekle; for (b in lib.listAll()) ile her kitabın format çıktısını println ile yazdır.
Örnek çözümü göster
class Library {
private val books = mutableListOf<Book>()
fun add(b: Book) { books.add(b) }
fun listAll(): List<Book> = books.toList()
}
fun main() {
val lib = Library()
lib.add(Book("Suç ve Ceza", "Dostoyevski", 1866, Fiction))
lib.add(Book("Sapiens", "Harari", 2011, NonFiction))
for (b in lib.listAll()) {
println(b.format())
}
}
Kendini test et
-
Library parçalarını eşle
- mutableListOf<Book>
- Değiştirilebilir liste
- fun add(b)
- Ekleme metodu
- fun listAll()
- Liste döndürme
- private val books
- Gizli alan
-
Değiştirilebilir liste oluştur
private val books = ____<Book>()
Cevabı göster
private val books = mutableListOf<Book>()
-
Library.books alanı neden private yapılır?
- Daha az bellek tüketsin diye
- Dış kodun listeyi doğrudan değiştirmesini önlemek için
- Daha hızlı çalışsın diye
- Derleyici uyarı vermesin diye
Cevabı göster
Dış kodun listeyi doğrudan değiştirmesini önlemek için — private, dış erişimi engeller ve kapsülleme sağlar.
Sıradaki ders: Dosya I/O