Sobes.tech
Junior

Хусусияти Data Class дар муқоиса бо дигар синфҳо дар Kotlin чист?

sobes.tech AI

Ҷавоб аз AI

Котлингда Data Class хусусиятлари:

  • equals(), hashCode(), toString(), copy() ва componentN() функцияларининг автоматик яратилиши.
  • Кам бўлса бир параметрни конструкторда талаб қилади.
  • Барча конструктор параметрлари val ёки var сифатида эълон қилиниши керак.
  • Асосий мақсади маълумотларни сақлаш.

Масалан:

// Оддий класс
class User(val name: String, val age: Int)

// Data Class
data class DataUser(val name: String, val age: Int)

fun main() {
    val user1 = User("Alice", 30)
    val user2 = User("Alice", 30)
    println(user1 == user2) // false (авто ҳолда манзилларни солиш)
    println(user1.toString()) // User@hashcode каби кўрсатади

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (маълумотларни солиш)
    println(dataUser1.toString()) // DataUser(name=Alice, age=30)
}

Яратилган функциялар орасида фарқлар:

Функция Оддий класс Data Class
equals() Манзилларни солиш Поллар бўйича маълумотларни солиш
hashCode() Ижро этишга боғлиқ Поллар бўйича маълумотларга боғлиқ
toString() Класс номи ва hash коди Класс номи ва қийматлар
copy() Йўқ (қўл билан амалга ошириш керак) Ҳамма кўчиришлар учун қулай
componentN() Йўқ Ҳам (объектни деструктурлаш имкони)

componentN()дан фойдаланиш:

// Data Class ни таърифлаш
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // component1(), component2() билан деструктурлаш
    println("x: $x, y: $y") // x: 10, y: 20
}