Kotlin Veri Sınıfı

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ı databir 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şlevi equals()ve hashCode()çifti ve toString()biçimi
  • componentN() 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) veya var(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 trueEğ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

Ilginç makaleler...