From 30c9601ddba81fa9f8fb35f5763809b6be4226b3 Mon Sep 17 00:00:00 2001 From: Antoine POINTEAU Date: Fri, 3 Dec 2021 11:52:09 +0100 Subject: [PATCH 1/4] add fr tour cas classes --- _fr/tour/case-classes.md | 63 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/_fr/tour/case-classes.md b/_fr/tour/case-classes.md index d5395721ea..d66da9769e 100644 --- a/_fr/tour/case-classes.md +++ b/_fr/tour/case-classes.md @@ -3,10 +3,71 @@ layout: tour title: Case Classes partof: scala-tour -num: 10 +num: 13 language: fr next-page: pattern-matching previous-page: multiple-parameter-lists --- + +Les classes de cas sont comme les autres classes avec quelques différences, nous allons les parcourir. Les classes de cas sont biens pour modéliser des données immuables. Dans la prochaine étape du tour, nous verrons comment elles sont utiles en [pattern matching](pattern-matching.html). + +## Définir une classe de cas + +Une classe de cas requiert au minimum le mot clef `case class`, un identifiant, et une liste de paramètres (qui peut être vide) : + +```scala mdoc +case class Book(isbn: String) + +val frankenstein = Book("978-0486282114") +``` + +Notez que le mot clef `new` n'a pas été utilisé pour instancier la classe de cas `Book`. C'est parce que la classe de cas a une méthode `apply` par défaut qui prend en charge la construction de l'objet. + +Quand vous créez une classe de cas avec des paramètres, les paramètres sont des `val` publiques. + +``` +case class Message(sender: String, recipient: String, body: String) +val message1 = Message("guillaume@quebec.ca", "jorge@catalonia.es", "Ça va ?") + +println(message1.sender) // prints guillaume@quebec.ca +message1.sender = "travis@washington.us" // cette ligne ne compile pas +``` + +Vous ne pouvez pas réassigner `message1.sender` parce que c'est une `val` (càd. une valeur immuable). Il est possible d'utiliser des `var` dans les classes de cas mais ce n'est pas recommandé. + +## Comparaison + +Les instances des classes de cas sont comparées structurellement et non par référence : + +```scala mdoc +case class Message(sender: String, recipient: String, body: String) + +val message2 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?") +val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?") +val messagesAreTheSame = message2 == message3 // true +``` + +Même si `message2` et `message3` font références à des objets différents, la valeur de chaque objet est égal. + +## Copier + +Vous pouvez créer une copie (superficielle) d'une instance de classe de cas simplement en utlisant la méthode `copy`. Vous pouvez optionnellement changer les arguments du constructeur. + +```scala mdoc:nest +case class Message(sender: String, recipient: String, body: String) +val message4 = Message("julien@bretagne.fr", "travis@washington.us", "Me zo o komz gant ma amezeg") +val message5 = message4.copy(sender = message4.recipient, recipient = "claire@bourgogne.fr") +message5.sender // travis@washington.us +message5.recipient // claire@bourgogne.fr +message5.body // "Me zo o komz gant ma amezeg" +``` + +Le destinataire (recipient) de `message4` est utilisé comment expéditeur (sender) du message `message5` mais le `body` du `message4` a été directement copié. + +## Plus d'informations + +* Apprennez-en plus sur les classes de cas dans [Scala Book](/overviews/scala-book/case-classes.html) + +Traduit par Antoine Pointeau. From 660941f6924b38a1678c50b7922013500bafe2b6 Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Mon, 27 Dec 2021 11:14:38 +0100 Subject: [PATCH 2/4] Update _fr/tour/case-classes.md Co-authored-by: Julien Richard-Foy --- _fr/tour/case-classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/case-classes.md b/_fr/tour/case-classes.md index d66da9769e..24d4ca4a19 100644 --- a/_fr/tour/case-classes.md +++ b/_fr/tour/case-classes.md @@ -11,7 +11,7 @@ next-page: pattern-matching previous-page: multiple-parameter-lists --- -Les classes de cas sont comme les autres classes avec quelques différences, nous allons les parcourir. Les classes de cas sont biens pour modéliser des données immuables. Dans la prochaine étape du tour, nous verrons comment elles sont utiles en [pattern matching](pattern-matching.html). +Les classes de cas sont comme les autres classes avec quelques différences que nous allons présenter. Les classes de cas sont pratiques pour modéliser des données immuables. Dans la prochaine étape du tour, nous verrons comment elles peuvent être utilisées avec le [pattern matching](pattern-matching.html). ## Définir une classe de cas From 6ef2c04fe3542f75f070c4d89e9da5767205bafd Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Mon, 27 Dec 2021 11:15:03 +0100 Subject: [PATCH 3/4] Update _fr/tour/case-classes.md Co-authored-by: Julien Richard-Foy --- _fr/tour/case-classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/case-classes.md b/_fr/tour/case-classes.md index 24d4ca4a19..ca1f91286d 100644 --- a/_fr/tour/case-classes.md +++ b/_fr/tour/case-classes.md @@ -35,7 +35,7 @@ println(message1.sender) // prints guillaume@quebec.ca message1.sender = "travis@washington.us" // cette ligne ne compile pas ``` -Vous ne pouvez pas réassigner `message1.sender` parce que c'est une `val` (càd. une valeur immuable). Il est possible d'utiliser des `var` dans les classes de cas mais ce n'est pas recommandé. +Vous ne pouvez pas réaffecter `message1.sender` parce que c'est une `val` (càd. une valeur immuable). Il est possible d'utiliser des `var` dans les classes de cas mais ce n'est pas recommandé. ## Comparaison From 68ee6e6a339381605725295deae6283a982e4b01 Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Mon, 27 Dec 2021 11:16:04 +0100 Subject: [PATCH 4/4] Update _fr/tour/case-classes.md Co-authored-by: Julien Richard-Foy --- _fr/tour/case-classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/case-classes.md b/_fr/tour/case-classes.md index ca1f91286d..66debb53f4 100644 --- a/_fr/tour/case-classes.md +++ b/_fr/tour/case-classes.md @@ -49,7 +49,7 @@ val message3 = Message("jorge@catalonia.es", "guillaume@quebec.ca", "Com va?") val messagesAreTheSame = message2 == message3 // true ``` -Même si `message2` et `message3` font références à des objets différents, la valeur de chaque objet est égal. +Même si `message2` et `message3` font référence à des objets différents, les valeurs de chaque objet sont égales. ## Copier