Kotlin Academy · Leçon

Copier avec copy() et redéfinitions partielles

Utilisez copy() pour créer des instances modifiées sans modifier l’originale.

Leçon 2 sur 413 étapes

Copier avec copy() et redéfinitions partielles 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.

Mises à jour immuables avec copy()

copy() crée une nouvelle instance d’une classe de données avec certaines propriétés modifiées. Toutes les propriétés non spécifiées conservent leurs valeurs d’origine.

copy() de base

Passez des arguments nommés pour remplacer certaines propriétés.
data class Person(val name: String, val age: Int, val city: String)
val alice = Person("Alice", 30, "Berlin")
val olderAlice = alice.copy(age = 31)
println(olderAlice)  // Person(name=Alice, age=31, city=Berlin)

Copier plusieurs champs

Remplacez autant de champs que nécessaire.
data class Config(val host: String, val port: Int, val ssl: Boolean, val timeout: Int)
val prod = Config("prod.server", 443, true, 30)
val test = prod.copy(host = "test.server", port = 8080, ssl = false)
println(test)

copy ne modifie pas l’original

copy crée toujours un nouvel objet. L’original reste complètement inchangé.
data class Point(val x: Int, val y: Int)
val origin = Point(0, 0)
val moved = origin.copy(x = 5)
println(origin)  // Point(x=0, y=0) — unchanged
println(moved)   // Point(x=5, y=0)

Attention à la copie profonde

copy est une copie superficielle. Les objets mutables contenus dans une classe de données sont partagés entre l’original et la copie.
data class Team(val name: String, val members: MutableList<String>)
val t1 = Team("A", mutableListOf("Alice"))
val t2 = t1.copy(name = "B")
t2.members.add("Bob")       // modifies SHARED list!
println(t1.members)  // [Alice, Bob] ← also changed!

Éviter les problèmes liés aux copies superficielles

Utilisez des données immuables dans les classes de données pour éviter les problèmes de partage.
data class Team(val name: String, val members: List<String>)  // immutable list
val t1 = Team("A", listOf("Alice"))
val t2 = t1.copy(name = "B", members = t1.members + "Bob")
println(t1.members)  // [Alice]
println(t2.members)  // [Alice, Bob]

copy dans la gestion de l’état

copy est la manière idiomatique de mettre à jour l’état dans les architectures de type Redux ou MVI.
data class UiState(val loading: Boolean, val items: List<String>, val error: String?)
fun reduce(state: UiState, action: Action) = when (action) {
    is Loading -> state.copy(loading = true)
    is Success -> state.copy(loading = false, items = action.data)
    is Error -> state.copy(loading = false, error = action.msg)
}

copy avec des paramètres par défaut

Les classes de données comportant de nombreuses propriétés conservent une fonction copy pratique grâce aux paramètres nommés.
data class Article(
    val id: Long, val title: String, val body: String,
    val published: Boolean = false, val views: Int = 0
)
val draft = Article(1L, "Hello", "Content...")
val published = draft.copy(published = true)
println(published.title)  // Hello

Utiliser copy dans les tests

copy facilite la création des appareils de test : créez un objet de base et ne faites varier que les champs nécessaires.
val baseUser = User(id = 1, name = "Test", email = "test@test.com", active = true)
val inactiveUser = baseUser.copy(active = false)
val renamed = baseUser.copy(name = "Renamed")

copy ou le modèle Builder

La fonction copy() d’une classe de données est la réponse de Kotlin au modèle Builder. Pour les objets complexes comportant de nombreux champs facultatifs, l’association classe de données + copy est plus concise.
// Java Builder:
User.builder().name("A").age(30).role("admin").build()
// Kotlin:
val u = User("A", 30, "admin")  // or copy from base

Sémantique des enregistrements

Les classes de données dont les propriétés sont des val se comportent comme les enregistrements Java (JDK 16 et versions ultérieures) : elles sont immuables, fondées sur la valeur et automatiquement imprimables.
data class RGB(val r: Int, val g: Int, val b: Int)
val white = RGB(255, 255, 255)
println(white)  // RGB(r=255, g=255, b=255)

Vérification rapide

Que devient l’instance originale de la classe de données lorsque vous appelez copy() dessus ?

Récapitulatif

copy() crée une nouvelle instance avec des champs remplacés : l’original reste inchangé. C’est idéal pour la gestion de l’état, les tests et la construction de style Builder. Méfiez-vous des copies superficielles avec des propriétés mutables. Ensuite : la déstructuration !
Gratuit pour commencer

Apprends Kotlin avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
51
Leçons
203

Questions Fréquemment Posées

La leçon « Copier avec copy() et redéfinitions partielles » est-elle gratuite ?

Oui — le texte complet de « Copier avec copy() et redéfinitions partielles » 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 « Copier avec copy() et redéfinitions partielles » ?

Utilisez copy() pour créer des instances modifiées sans modifier l’originale. 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 « Copier avec copy() et redéfinitions partielles » ?

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. Notions de base des classes de données : méthodes générées automatiquement
  2. Copier avec copy() et redéfinitions partielles
  3. Déclarations déstructurées avec componentN
  4. Classes de données dans les collections et comme clés de map
← Retour à Kotlin Academy