Sobes.tech
Junior

Πώς λειτουργούν οι κλάσεις δεδομένων στο Kotlin;

sobes.tech AI

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

Οι κλάσεις δεδομένων σε Kotlin χρησιμοποιούνται για την αποθήκευση δεδομένων. Ο μεταγλωττιστής δημιουργεί αυτόματα τις τυπικές μεθόδους:

  • equals(): Συγκρίνει τις περιπτώσεις βάσει των τιμών των ιδιοτήτων τους.
  • hashCode(): Δημιουργεί έναν κωδικό κατακερματισμού βάσει των τιμών των ιδιοτήτων.
  • toString(): Επιστρέφει μια αναπαράσταση σε συμβολοσειρά που περιλαμβάνει τα ονόματα και τις τιμές όλων των ιδιοτήτων.
  • copy(): Δημιουργεί ένα αντίγραφο του αντικειμένου, τροποποιώντας αν χρειάζεται τις τιμές των υποδεικνυόμενων ιδιοτήτων.
  • componentN(): Μέθοδοι για αποδόμηση (destructuring) του αντικειμένου σε μεμονωμένες ιδιότητες.
// Παράδειγμα κλάσης δεδομένων
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) // true
    println(user1 == user3) // false

    // 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, Ηλικία: $age") // Όνομα: Alice, Ηλικία: 30
}

Βασικά σημεία:

  • Όλες οι ιδιότητες που ορίζονται στον κύριο κατασκευαστή πρέπει να είναι val ή var.
  • Η κλάση δεδομένων δεν μπορεί να είναι abstract, open, sealed ή inner.
  • Οι κλάσεις δεδομένων μπορούν να κληρονομήσουν άλλες κλάσεις ή να υλοποιήσουν διεπαφές.
  • Οι ιδιότητες που δηλώνονται εκτός του κύριου κατασκευαστή δεν συμμετέχουν στη δημιουργία των τυπικών μεθόδων.
Μέθοδος Περιγραφή
equals() Συγκρίνει τις ιδιότητες του κύριου κατασκευαστή.
hashCode() Δημιουργεί ένα hash βάσει των ιδιοτήτων του κύριου κατασκευαστή.
toString() Εμφανίζει μια αναπαράσταση σε συμβολοσειρά των ιδιοτήτων του κύριου κατασκευαστή.
copy() Δημιουργεί μια επιφανειακή αντιγραφή με δυνατότητα τροποποίησης των ιδιοτήτων.
componentN() Πρόσβαση στις ιδιότητες με τη σειρά δήλωσής τους στον κατασκευαστή.

Οι κλάσεις δεδομένων απλοποιούν σημαντικά τη δουλειά με POJO (Plain Old Java Object) ή DTO (Data Transfer Object), μειώνοντας τον κώδικα boilerplate.