Sobes.tech
Junior

Kotlinдеги маалымат класстары кантип иштейт?

sobes.tech AI

AIден жооп

Котлинде маалымат класстары маалыматтарды сактоо үчүн колдонулат. Компилятор автоматтык түрдө алардын үчүн стандарттык методдорду түзөт:

  • equals(): Өзгөрмөлөрдүн маанилери негизинде экземплярларды салыштырат.
  • hashCode(): Өзгөрмөлөрдүн маанилери негизинде хеш-код түзөт.
  • toString(): Бардык өзгөчөлүктөрдүн аттары жана маанилери камтылган саптык көрсөтүүнү кайтарат.
  • copy(): Объекттин көчүрмөсүн түзөт, керек болсо белгилүү өзгөчөлүктөрдүн маанилерин өзгөртүп.
  • componentN(): объектти бөлүп көрсөтүү үчүн методдор (объектти бөлүп, жеке өзгөчөлүктөргө бөлүү).
// Маалымат классынын мисалы
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) // чын
    println(user1 == user3) // жалган

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

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

    // componentN() жана бөлүп көрсөтүү
    val (name, age) = user1
    println("Name: $name, Age: $age") // Name: Alice, Age: 30
}

Ключтуу учурлар:

  • Бардык өзгөчөлүктөр, негизги конструктордо аныкталган, val же var болушу керек.
  • Маалымат классы abstract, open, sealed же inner болбойт.
  • Маалымат класстары башка класстарды мурас кылышы же интерфейстерди ишке ашырышы мүмкүн.
  • Конструктордон тышкары жарыяланган өзгөчөлүктөр стандарттык методдорго катышпайт.
Метод Түшүндүрмө
equals() Негизги конструктордон алынган өзгөчөлүктөрдү салыштырат.
hashCode() Негизги конструктордон алынган өзгөчөлүктөрдүн негизинде хеш түзөт.
toString() Негизги конструктордон алынган өзгөчөлүктөрдүн саптык көрсөтүүсү.
copy() Жогорку деңгээлдеги көчүрмө түзөт, өзгөчөлүктөрдү өзгөртүүгө мүмкүнчүлүк берет.
componentN() Конструктордо берилген тартип боюнча өзгөчөлүктөргө жетүү.

Маалымат класстары POJO (Plain Old Java Object) же DTO (Data Transfer Object) иштөө процессин кыйла жеңилдетет, бойлерплейт кодду азайтат.