Sobes.tech
Junior

Ποιο είναι το χαρακτηριστικό της Data Class σε σύγκριση με άλλα κλάσεις στο Kotlin;

sobes.tech AI

Απάντηση από AI

Χαρακτηριστικά της Data Class σε Kotlin:

  • Αυτόματη δημιουργία των συναρτήσεων 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
}