value class vs data class
- Kotlin kursu
- Orta seviye
- Ders 80/116
- 5 dk
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
// 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
@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
@JvmInline
____ class Email(val address: String)
@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.