Sobes.tech
Junior

Comment fonctionnent les classes de données en Kotlin?

sobes.tech IA

Réponse de l'IA

Les classes de données en Kotlin sont utilisées pour stocker des données. Le compilateur génère automatiquement les méthodes standard :

  • equals(): Compare les instances en fonction des valeurs de leurs propriétés.
  • hashCode(): Génère un code de hachage basé sur les valeurs des propriétés.
  • toString(): Renvoie une représentation sous forme de chaîne incluant les noms et valeurs de toutes les propriétés.
  • copy(): Crée une copie de l'objet, en modifiant si nécessaire les valeurs des propriétés indiquées.
  • componentN(): Méthodes pour la déstructuration (décomposition de l'objet en propriétés individuelles).
// Exemple de classe de données
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() et déstructuration
    val (name, age) = user1
    println("Nom : $name, Âge : $age") // Nom : Alice, Âge : 30
}

Points clés :

  • Toutes les propriétés définies dans le constructeur principal doivent être val ou var.
  • La classe de données ne peut pas être abstract, open, sealed ou inner.
  • Les classes de données peuvent hériter d'autres classes ou implémenter des interfaces.
  • Les propriétés déclarées en dehors du constructeur principal ne participent pas à la génération des méthodes standard.
Méthode Description
equals() Compare les propriétés du constructeur principal.
hashCode() Génère un hash basé sur les propriétés du constructeur principal.
toString() Affiche une représentation en chaîne des propriétés du constructeur principal.
copy() Crée une copie superficielle avec la possibilité de modifier les propriétés.
componentN() Accède aux propriétés dans l'ordre de leur déclaration dans le constructeur.

Les classes de données simplifient considérablement le travail avec POJO (Plain Old Java Object) ou DTO (Data Transfer Object), en réduisant le code boilerplate.