Sobes.tech
Junior — Middle

Оё дар усули hashCode майдоне, ки дар дохили data class эълон шудааст, истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

ב-Kotlin, הקומפילר מייצר אוטומטית את שיטות hashCode(), equals(), toString(), וכן copy() ורכיבים לפירוק. שיטת hashCode() מבוססת על כל התכונות המוצהרות ב-קונסטרוקטור הראשי של data class (כלומר, על אלה שמצוינות לאחר שם המחלקה).

אם בתוך data class מוגדר שדה נוסף מחוץ לקונסטרוקטור הראשי, הוא לא משתתף בחישוב של hashCode() ו-equals(). זאת מכיוון ששיטות אלה מתייחסות רק לתכונות שמוצהרות בקונסטרוקטור, כדי להבטיח השוואה נכונה והאשטה של אובייקטים על בסיס הנתונים העיקריים.

דוגמה:

data class User(val id: Int, val name: String) {
    var age: Int = 0 // לא משתתף ב-hashCode ו-equals
}

fun main() {
    val user1 = User(1, "Alice")
    val user2 = User(1, "Alice")
    user1.age = 25
    user2.age = 30
    println(user1 == user2) // true, כי הגיל לא נחשב
    println(user1.hashCode() == user2.hashCode()) // true
}