Sobes.tech
Middle

Για ποιο λόγο χρησιμοποιούνται οι κλάσεις δεδομένων και οι κλάσεις sealed στο Kotlin;

sobes.tech AI

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

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

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN() για αποδόμηση
κλάση δεδομένων User(val όνομα: String, val ηλικία: Int)

// Χρήση
val user = User("Alice", 30)
println(user) // Εμφανίζει User(όνομα=Alice, ηλικία=30)
val user2 = user.copy(ηλικία = 31)
val (όνομα, ηλικία) = user // Αποδόμηση

Οι κλειστές κλάσεις (sealed) αντιπροσωπεύουν μια περιορισμένη ιεραρχία κλάσεων, όπου όλες οι πιθανές υποκλάσεις είναι γνωστές κατά τη διάρκεια της μεταγλώττισης. Αυτό επιτρέπει τη χρήση τους σε εκφράσεις when χωρίς μπλοκ else, διασφαλίζοντας πλήρη έλεγχο όλων των επιλογών.

κλειστή κλάση Result {
    data class Success(val data: String) : Result()
    data class Error(val μήνυμα: String) : Result()
    object Loading : Result() // Αντικείμενο, καθώς δεν έχει παραμέτρους
}

fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("Επιτυχία: ${result.data}")
        is Result.Error -> println("Σφάλμα: ${result.mήνυμα}")
        Result.Loading -> println("Φόρτωση...")
    }
}

Σύγκριση:

Χαρακτηριστικό Data-κλάση Κλειστή κλάση
Σκοπός Αποθήκευση δεδομένων Περιορισμένη ιεραρχία κλάσεων
Δυνατότητες Αυτόματη δημιουργία μεθόδων Πλήρης έλεγχος σε when
Υποκλάσεις Χωρίς συγκεκριμένο περιορισμό Πρέπει να είναι στο ίδιο αρχείο ή module
Χρήση Μοντέλα δεδομένων, DTOs Αναπαράσταση καταστάσεων, γεγονότων, επιλογών