Junior
Kotlinдеги башка класстарга салыштырмалуу Data Class өзгөчөлүгү эмнеде?
sobes.tech AI
AIден жооп
Kotlinдеги 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) // жалган (өзүнчө шилтемелерди салыштырат)
println(user1.toString()) // User@hashcode сыяктуу чыгат
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // чын (маалыматтарды салыштырат)
println(dataUser1.toString()) // DataUser(name=Alice, age=30)
}
Жасалган функциялардын айырмачылыктары:
| Функция | Жөнөкөй класс | Data Class |
|---|---|---|
equals() |
шилтемелерди салыштырат | талаалар боюнча салыштырат |
hashCode() |
ишке ашырууга көз каранды | талаалар боюнча көз каранды |
toString() |
класс аты жана хэш коду | класс аты жана талаалардын маанилери |
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
}