Kotlin'de data class, verileri saklamak için tasarlanmıştır. Derleyici, equals(), hashCode(), toString() metodlarını otomatik olarak üretir, ayrıca copy() ve componentN() fonksiyonları, bu tür nesnelerle çalışmaya büyük ölçüde yardımcı olur:
data class User(val name: String, val age: Int) val u1 = User("Ivan", 30) val u2 = u1.copy(age = 31)
Normal sınıfların böyle otomatik olarak üretilmiş metodları yoktur; her şey manuel olarak yazılır. Veri sınıflarını DTO'lar, modeller ve veri yapıları için kullanmak daha iyidir.
Veri sınıflarının kısıtlamaları:
val veya var ile etiketlenmelidir.abstract, open, sealed veya inner olamaz."Bir veri sınıfını diğer bir veri sınıfından kalıtım (inheritance) yoluyla ilan edebilir miyiz? Neden (veya neden olamaz)?"
Hayır, bir veri sınıfı doğrudan başka bir veri sınıfından kalıtım alamaz. Veri sınıfı yalnızca bir arayüzden veya normal bir sınıftan (veri sınıfı olmayan) kalıtım alabilir. Bu, otomatik olarak üretilen metodlarla karışıklığı önlemek içindir (örneğin, kalıtılan özelliklerin kopyalanması belirsizdir).
data class Base(val id: Int) data class Child(val name: String) : Base(1) // Derleme hatası: izin verilmedi
Hikaye
Bir bankacılık projesinde, iş mantığı ve kalıtım ile veri sınıfı kullanıldı. Yeni bir alan eklendikten sonra, nesneleri doğru bir şekilde kopyalamak mümkün olmadı, bir kısmı iş mantığı kayboldu (metodlar miras alınmamıştı) ve bu, komisyon hesaplamalarında hatalara yol açtı.
Hikaye
Bir e-ticaret platformunda veri sınıfı, kullanıcının sepet durumunu saklamak için kullanıldı.
copy()ile durum güncellendikten sonra, iç listelerin derinlemesine kopyalanmadığını unuttular. Bu nedenle, kullanıcılar arasında "veri sızıntısı" meydana geldi.
Hikaye
Bir dış API entegrasyonu projesinde, veri sınıfının JSON'a serileştirilmesi özel görünürlüğe sahip alanların ortaya çıkmasına yol açtı, bu da API sözleşmesini ihlal etti ve istemci tarafında hatalara neden oldu.