CodeBlanks Logo Icon CodeBlanks

Özet - Data class

data class, copy ve destructuring'i birleştirerek bir User modeli yazarsın.

Özet - Data class

Bu grupta data class tanımını, copy ile kopyalamayı, equals ve hashCode otomatik üretimini, toString biçimini ve destructuring ile bileşenlerine ayırmayı öğrendin.

Şimdi bunları birleştireceksin: bir veri sınıfı tanımlayıp copy ile değişiklik yapacak ve destructuring ile bileşenlerini ayıracaksın. Bu yapı, Kotlin'de veri modelleme ve aktarmanın temelidir. İleride sealed sınıflar ve jenerikler bu temelin üzerine eklenecek.

Uygulama User modelini birleştir

User adında bir veri sınıfı tanımla; primary constructor val name: String, val age: Int, val email: String alsın. main içinde User("Ayşe", 30, "ayse@x.com") örneği oluştur. u.copy(age = 31) ile v örneği üret. u'yu destructuring ile name, age ve email değişkenlerine ayır. name, age ve v'yi ayrı ayrı println ile yazdır.

Başlangıç kodu

Main.kt
// User veri sınıfı tanımı
// name, age, email özellikleri ile
// main'de örnekle, copy ile v üret
// destructuring ile ayır, üçünü yazdır

Örnek çözüm

Main.kt
data class User(val name: String, val age: Int, val email: String)

fun main() {
    val u = User("Ayşe", 30, "ayse@x.com")
    val v = u.copy(age = 31)
    val (name, age, email) = u
    println(name)
    println(age)
    println(v)
}

Beklenen çıktı

Ayşe
30
User(name=Ayşe, age=31, email=ayse@x.com)

Sırada ne var?

Veri sınıflarını öğrendin. Sonraki gruplarda sealed class ile kapalı hiyerarşileri, when ile exhaustive dallanmayı ve object ile singleton yapıları keşfedeceksin.

Bu grup; data class, copy, equals, toString ve destructuring kavramlarını birleştirdi. Bunlar Kotlin veri modellemenin çekirdeğidir. Bir sonraki adımda kapalı hiyerarşilerle güvenli kalıtım desenleri göreceksin.

Uygulama Money veri sınıfı ve add metodu

Money adında bir veri sınıfı tanımla; primary constructor val amount: Double, val currency: String alsın. Sınıf gövdesine fun add(other: Money): Money metodu ekle; gövdesi Money(amount + other.amount, currency) döndürsün. main içinde Money(100.0, "TL") ve Money(50.0, "TL") örneklerini oluştur, add ile topla ve sonucu yazdır.

Başlangıç kodu

Main.kt
// Money veri sınıfı tanımı
// amount ve currency özellikleri ile
// add metodu: başka Money ile toplar
// main'de iki örnek, topla, yazdır

Örnek çözüm

Main.kt
data class Money(val amount: Double, val currency: String) {
    fun add(other: Money): Money {
        return Money(amount + other.amount, currency)
    }
}

fun main() {
    val a = Money(100.0, "TL")
    val b = Money(50.0, "TL")
    val c = a.add(b)
    println(c)
}

Beklenen çıktı

Money(amount=150.0, currency=TL)

Soru ve cevaplar

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

1 Aşağıdakilerden hangisi bir veri sınıfında otomatik üretilmez?

  • equals
  • hashCode
  • toString
  • factory metot Doğru cevap

Açıklama: factory metot otomatik üretilmez; bunu companion object içinde kendin yazarsın.

2 copy çağrısını tamamla

Soru
val v = u.____(age = 31)
Cevap
val v = u.copy(age = 31)

Açıklama: copy metodu özellik değiştirerek kopya üretir.

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