Sobes.tech
Junior

Quelle est la particularité de la Data Class par rapport aux autres classes en Kotlin?

sobes.tech IA

Réponse de l'IA

Caractéristiques de la Data Class en Kotlin :

  • Génération automatique des fonctions equals(), hashCode(), toString(), copy() et componentN().
  • Nécessitent au moins un paramètre dans le constructeur.
  • Tous les paramètres du constructeur doivent être déclarés comme val ou var.
  • Conçues principalement pour stocker des données.

Exemple :

// Classe normale
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 (compare les références par défaut)
    println(user1.toString()) // Affichera quelque chose comme User@hashcode

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (compare les données)
    println(dataUser1.toString()) // Affichera DataUser(name=Alice, age=30)
}

Différences dans les fonctions générées :

Fonction Classe normale Data Class
equals() Comparaison de références Comparaison des données par champs
hashCode() Dépend de l'implémentation Dépend des données par champs
toString() Nom de la classe et hash Nom de la classe et valeurs des champs
copy() Non (implémentation manuelle requise) Oui (permet de créer facilement des copies)
componentN() Non Oui (permet de destructurer l'objet)

Utilisation de componentN() :

// Définition d'une Data Class
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // Destructuration avec component1(), component2()
    println("x: $x, y: $y") // Affichera x: 10, y: 20
}