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 :
equalset==comparent les valeurshashCodereste cohérent avec l’égalitécopyclone 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
- Déclaration de classes de données
- copy et equals
- Déclarations par déstructuration
- Classes de données dans les collections