Bu makalede, Kotlin'de veri sınıfları oluşturmayı öğreneceksiniz. Ayrıca veri sınıfının karşılaması gereken gereksinimleri ve standart işlevlerini de öğreneceksiniz.
Yalnızca verileri tutmak için bir sınıf oluşturmanız gereken bir durum ortaya çıkabilir. Bu gibi durumlarda, sınıfı data
bir veri sınıfı oluşturacak şekilde işaretleyebilirsiniz . Örneğin,
veri sınıfı Kişi (değer adı: Dize, var yaş: Int)
Bu sınıf için derleyici otomatik olarak şunları oluşturur:
copy()
birincil yapıcının işleviequals()
vehashCode()
çifti vetoString()
biçimicomponentN()
fonksiyonlar
Bu özelliklerden ayrıntılı olarak bahsetmeden önce, bir veri sınıfının yerine getirmesi gereken gereksinimlerden bahsedelim.
Kotlin Veri Sınıfı Gereksinimleri
Gereksinimler şunlardır:
- Birincil kurucu en az bir parametreye sahip olmalıdır.
- Birincil kurucunun parametreleri
val
(salt okunur) veyavar
(okuma-yazma) olarak işaretlenmelidir. - Sınıf açık, soyut, içsel veya mühürlü olamaz.
- Sınıf diğer sınıfları genişletebilir veya arayüzler uygulayabilir. 1.1'den önceki Kotlin sürümünü kullanıyorsanız, sınıf yalnızca arabirimleri uygulayabilir.
Örnek: Kotlin Veri Sınıfı
data class User(val name: String, val age: Int) fun main(args: Array) ( val jack = User("jack", 29) println("name = $(jack.name)") println("age = $(jack.age)") )
Programı çalıştırdığınızda, çıktı:
isim = jack yaş = 29
Bir veri sınıf bildirmek, derleyici otomatik gibi çeşitli işlevleri üretir toString()
, equals()
, hashcode()
vb perde arkasında. Bu, kodunuzu kısa tutmanıza yardımcı olur. Java kullanmış olsaydınız, çok sayıda standart kod yazmanız gerekirdi.
Şu işlevleri kullanalım:
Kopyalama
Bir veri sınıfı için, bir nesnenin bir kopyasını copy()
işlevini kullanarak farklı özelliklerinden bazılarıyla oluşturabilirsiniz . Şu şekilde çalışır:
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) // using copy function to create an object val u2 = u1.copy(name = "Randy") println("u1: name = $(u1.name), name = $(u1.age)") println("u2: name = $(u2.name), name = $(u2.age)") )
Programı çalıştırdığınızda, çıktı:
u1: ad = John, ad = 29 u2: ad = Randy, ad = 29
toString () yöntemi
ToString () işlevi, nesnenin bir dize gösterimini döndürür.
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) println(u1.toString()) )
Programı çalıştırdığınızda, çıktı:
Kullanıcı (ad = John, yaş = 29)
hashCode () ve equals ()
hasCode()
Nesne için bir yöntem döner karma kodu. İki nesne eşitse, hashCode()
aynı tam sayı sonucunu verir. Önerilen Okuma: hashCode ()
equals()
Döner true
Eğer iki nesne (vardır aynı eşittir hashCode()
). Nesneler eşit değilse equals()
geri döner false
. Önerilen Okuma: eşittir ()
data class User(val name: String, val age: Int) fun main(args: Array) ( val u1 = User("John", 29) val u2 = u1.copy() val u3 = u1.copy(name = "Amanda") println("u1 hashcode = $(u1.hashCode())") println("u2 hashcode = $(u2.hashCode())") println("u3 hashcode = $(u3.hashCode())") if (u1.equals(u2) == true) println("u1 is equal to u2.") else println("u1 is not equal to u2.") if (u1.equals(u3) == true) println("u1 is equal to u3.") else println("u1 is not equal to u3.") )
Programı çalıştırdığınızda, çıktı:
u1 hashcode = 71750738 u2 hashcode = 71750738 u3 hashcode = 771732263 u1, u2'ye eşittir. u1, u3'e eşit değildir.
Yıkıcı Bildirimler
Bir nesneyi, yok etme bildirimini kullanarak bir dizi değişkene dönüştürebilirsiniz. Örneğin:
veri sınıfı Kullanıcı (değer adı: Dize, değer yaşı: Uluslararası, değer cinsiyeti: Dize) fun main(args: Array) ( val u1 = User("John", 29, "Male") val (name, age, gender) = u1 println("name = $name") println("age = $age") println("gender = $gender") )
Programı çalıştırdığınızda, çıktı:
isim = John yaş = 29 cinsiyet = Erkek
Bu, derleyicinin componentN()
bir veri sınıfının tüm özelliklerini oluşturması nedeniyle mümkün olmuştur . Örneğin:
data class User(val name: String, val age: Int, val gender: String) fun main(args: Array) ( val u1 = User("John", 29, "Male") println(u1.component1()) // John println(u1.component2()) // 29 println(u1.component3()) // "Male" )
Programı çalıştırdığınızda, çıktı:
John 29 Erkek