CodeBlanks Logo Icon CodeBlanks

value class vs data class

value class ve data class farkını öğrenirsin.

value class vs data class

value class tek bir değeri sıfır ek yükle sarmalar; data class birden fazla alanı tutar ve equals, hashCode, toString, copy üretir. Value class tür güvenliği için, data class veri modelleme içindir.

Örnek: @JvmInline value class Email(val address: String) tek bir e-posta adresini sarmalar. data class User(val name: String, val age: Int) iki alanı birlikte tutar. Value class ikinci alan eklenemez; data class istediğiniz kadar alan alır. İkisi de değiştirilemez (immutable) olabilir.

Karşılaştırma tablosu

Value class: tek val alan, @JvmInline gerekli, equals/hashCode otomatik üretilmez, çalışma zamanında inline. Data class: birden çok alan, data niteleyicisi, equals/hashCode/toString/copy otomatik.

Bir e-posta adresini String yerine Email ile sarmak value class için uygundur: tek alan, tür güvenliği. Bir kullanıcı modeli ad ve yaşla data class için uygundur: çok alan, yardımcı metotlar. İkisi birlikte de kullanılabilir: data class User(val name: String, val email: Email).

Uygulama Email ve User tanımla

@JvmInline value class Email(val address: String) tanımla. data class User(val name: String, val age: Int) tanımla. main içinde val e = Email("ayse@x.com") ve val u = User("Ayşe", 30) oluştur; println(e) ve println(u) ile yazdır.

Başlangıç kodu

Main.kt
// Email değer sınıfını tanımla: value class ile
// User veri sınıfını tanımla: name ve age ile

fun main() {
    // Email ve User örnekleri oluştur ve yazdır
}

Örnek çözüm

Main.kt
@JvmInline
value class Email(val address: String)

data class User(val name: String, val age: Int)

fun main() {
    val e = Email("ayse@x.com")
    val u = User("Ayşe", 30)
    println(e)
    println(u)
}

Beklenen çıktı

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

Soru ve cevaplar

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

1 value vs data class eşle

Kavram Anlamı
value class Tek alan, sıfır yük
data class Çok alan, metotlar
@JvmInline Value class
copy() Data class

2 Email sarmalayıcıyı tamamla

Soru
@JvmInline
____ class Email(val address: String)
Cevap
@JvmInline
value class Email(val address: String)

Açıklama: value class Email tek alanlı sarmalayıcıdır.

3 Ne zaman value class data class'a tercih edilir?

  • Birden fazla alan gerekince
  • equals/hashCode gerekince
  • Tek alan, tür güvenliği gerekince Doğru cevap
  • copy gerekince

Açıklama: Tek alan ve tür güvenliği value class için uygundur.

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