Sobes.tech
Junior

Kotlin'da ma'lumotlar sinflari qanday ishlaydi?

sobes.tech AI

AIdan javob

Kotlin'da ma'lumotlar sinflari ma'lumotlarni saqlash uchun ishlatiladi. Kompilyator ular uchun standart metodlarni avtomatik ravishda yaratadi:

  • equals(): Ob'ektlarni ularning xususiyatlarining qiymatlari asosida solishtiradi.
  • hashCode(): Xususiyatlarning qiymatlari asosida hash kodini yaratadi.
  • toString(): Barcha xususiyatlarning nomlari va qiymatlarini o'z ichiga olgan satr ko'rinishini qaytaradi.
  • copy(): Ob'ektning nusxasini yaratadi, kerak bo'lsa, belgilangan xususiyatlarning qiymatlarini o'zgartiradi.
  • componentN(): Ob'ektni bo'laklarga ajratish uchun metodlar.
// Ma'lumotlar sinfi misoli
data class User(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    val user3 = User("Bob", 25)

    // equals()
    println(user1 == user2) // true
    println(user1 == user3) // false

    // toString()
    println(user1.toString()) // User(name=Alice, age=30)

    // copy()
    val user4 = user1.copy(age = 31)
    println(user4) // User(name=Alice, age=31)

    // componentN() va destrukturing
    val (name, age) = user1
    println("Ism: $name, Yoshi: $age") // Ism: Alice, Yoshi: 30
}

Asosiy nuqtalar:

  • Asosiy konstruktorida belgilangan barcha xususiyatlar val yoki var bo'lishi kerak.
  • Ma'lumotlar sinfi abstract, open, sealed yoki inner bo'lishi mumkin emas.
  • Ma'lumotlar sinflari boshqa sinflardan meros olishi yoki interfeyslarni amalga oshirishi mumkin.
  • Asosiy konstruktor tashqarisida e'lon qilingan xususiyatlar standart metodlarning yaratilishida qatnashmaydi.
Metod Tavsifi
equals() Asosiy konstruktor xususiyatlarini solishtiradi.
hashCode() Asosiy konstruktor xususiyatlariga asoslangan hash kodini yaratadi.
toString() Asosiy konstruktor xususiyatlarining satr ko'rinishini chiqaradi.
copy() Xususiyatlarni o'zgartirish imkoniyatiga ega bo'lgan yuzaki nusxa yaratadi.
componentN() Konstruktor deklaratsiyasiga muvofiq xususiyatlarga kirish.

Ma'lumotlar sinflari POJO (Plain Old Java Object) yoki DTO (Data Transfer Object) bilan ishlashni sezilarli darajada soddalashtiradi va boilerplate kodni kamaytiradi.