0Pricing
Kotlin Academy · Leçon

copy et equals

Fonctions générées

copy et equals est une leçon Kotlin Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Kotlin Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Kotlin Academy comprend 4 leçons au total.

Fonctions générées

En plus de toString, une classe de données génère les fonctions d’égalité, hashCode et copy.

Ces trois fonctions rendent les classes de données très faciles à comparer et à cloner.

Égalité structurelle

La fonction equals générée compare les objets à partir des valeurs de leurs propriétés, et non de leur identité.

Deux instances d’une classe de données qui ont les mêmes valeurs sont égales avec ==.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 30)
    println(a == b)
}

Des valeurs différentes ne sont pas égales

Modifiez une propriété et les objets ne seront plus égaux.

L’égalité est calculée à partir de chaque propriété du constructeur primaire.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = User("Alice", 31)
    println(a == b)
}

Égalité et identité

Utilisez == pour l’égalité de valeur (structurelle) et === pour l’égalité de référence (identité).

Deux objets de données égaux peuvent être des instances différentes en mémoire.

data class User(val name: String)

fun main() {
    val a = User("Alice")
    val b = User("Alice")
    println(a == b)  // values match
    println(a === b) // different instances
}

hashCode cohérent

hashCode est généré pour correspondre à equals : des objets égaux produisent la même empreinte.

C’est ce qui permet aux classes de données de fonctionner correctement dans les ensembles et comme clés de mappage.

data class Point(val x: Int, val y: Int)

fun main() {
    val a = Point(1, 2)
    val b = Point(1, 2)
    println(a.hashCode() == b.hashCode())
}

La fonction copy

copy crée un nouvel objet identique à l’original.

Avec des propriétés val immuables, la copie est la manière de créer une version modifiée.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy()
    println(b)
    println(a == b)
}

Copier avec des modifications

Transmettez des arguments nommés à copy pour modifier certaines propriétés tout en conservant les autres.

C’est le modèle standard pour mettre à jour des données immuables.

data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val older = a.copy(age = 31)
    println(a)
    println(older)
}

La copie laisse l’original intact

copy ne modifie jamais l’objet source. L’original conserve ses valeurs.

Cette immutabilité rend les changements d’état prévisibles et sûrs.

data class Account(val owner: String, val balance: Int)

fun main() {
    val original = Account("Sam", 100)
    val updated = original.copy(balance = 150)
    println(original.balance)
    println(updated.balance)
}

Chaîner les copies

Comme copy renvoie un nouvel objet, vous pouvez appliquer plusieurs mises à jour successives.

Chaque étape produit une valeur nouvelle et indépendante.

data class Config(val volume: Int, val muted: Boolean)

fun main() {
    val base = Config(50, false)
    val result = base.copy(volume = 70).copy(muted = true)
    println(result)
}

Seules les propriétés du constructeur comptent

Comme pour l’égalité, copy ne traite que les propriétés du constructeur primaire.

Les propriétés du corps reprennent leurs valeurs par défaut dans la copie : placez donc l’état important dans le constructeur.

data class User(val name: String) {
    var note: String = "none"
}

fun main() {
    val a = User("Alice")
    a.note = "VIP"
    val b = a.copy()
    println(b.note) // back to default
}

Assembler le tout

Les fonctions générées donnent toute leur puissance aux classes de données :

  • equals et == comparent les valeurs
  • hashCode reste cohérent avec l’égalité
  • copy clone l’objet avec des modifications facultatives
data class User(val name: String, val age: Int)

fun main() {
    val a = User("Alice", 30)
    val b = a.copy(name = "Alicia")
    println(a == b)
    println(b)
}

Vérification rapide

Vérifiez votre compréhension de copy et equals.

Récapitulatif

Vous avez appris quelles fonctions sont générées pour les classes de données :

  • Égalité compare les valeurs, avec == et ===
  • hashCode reste cohérent pour les collections
  • copy clone l’objet avec des modifications sélectives

Vous apprendrez ensuite comment la décomposition répartit les objets entre plusieurs variables.

Questions Fréquemment Posées

La leçon « copy et equals » est-elle gratuite ?

Oui — le texte complet de « copy et equals » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Kotlin Academy, passe à CoddyKit PRO. Le cours Kotlin Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « copy et equals » ?

Fonctions générées Tu pratiques Kotlin Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Kotlin Academy ?

Aucune expérience préalable n'est requise. Kotlin Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « copy et equals » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Kotlin Academy ?

Oui. Chaque leçon Kotlin Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Déclaration de classes de données
  2. copy et equals
  3. Déclarations par déstructuration
  4. Classes de données dans les collections
← Retour à Kotlin Academy