From c1480c2b50bbb094d6c8f5a854ecc0101fbb9d39 Mon Sep 17 00:00:00 2001 From: Antoine POINTEAU Date: Thu, 2 Dec 2021 16:33:42 +0100 Subject: [PATCH 1/6] add fr tour classes --- _fr/tour/classes.md | 117 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/_fr/tour/classes.md b/_fr/tour/classes.md index 40f56d0513..b42fa47c39 100644 --- a/_fr/tour/classes.md +++ b/_fr/tour/classes.md @@ -10,3 +10,120 @@ language: fr next-page: traits previous-page: unified-types --- + +Les classes en Scala sont des plans pour créer des objets. Elle peuvent contenir des méthodes, +des valeurs, des variables, des types, des objets, des traits, et des classes qui sont collectivement appelés _members_. Les types, les objets et les traits seront couvert plus tards dans le tour. + +## Définir une classe + +La définition minimum d'une classe est simplement le mot clef `class` plus un identifiant. +Le nom d'une classe doit commencer par une majuscule. + +```scala mdoc +class User + +val user1 = new User +``` + +Le mot clef `new` est utilisé pour créer une instance de la classe. `User` a un constructeur par défaut qui ne prend aucun argument, car aucun constructeur n'a été défini. Cependant, vous souhaiterez souvent un constructeur et un corps de classe. + +Voici un exemple de définition d'une classe pour un point : + +```scala mdoc +class Point(var x: Int, var y: Int) { + + def move(dx: Int, dy: Int): Unit = { + x = x + dx + y = y + dy + } + + override def toString: String = + s"($x, $y)" +} + +val point1 = new Point(2, 3) +println(point1.x) // 2 +println(point1) // prints (2, 3) +``` +Cette classe `Point` possède quatre membres : les variables `x` et `y` et les méthodes `move` et `toString`. +Contrairement à beaucoup d'autres langages, le constructeur primaire est dans la signature de la classe `(var x: Int, var y: Int)`. +La méthode `move` prend deux entiers en arguments et retourne la valeur Unit `()`, qui ne comporte aucune information. +Cela correspond à-peu-près à `void` dans les langages similaires à Java. +`toString`, d'un autre côté, ne prend aucun argument mais retourne une valeur `String`. +Etant donnée que `toString` écrase `toString` qui vient de [`AnyRef`](unified-types.html), elle doit être accompagnée du mot clef `override`. + +## Les constructeurs + +Les constructeurs peuvent avoir des paramètres optionnels en fournissant une valeur par défaut : + +```scala mdoc:nest +class Point(var x: Int = 0, var y: Int = 0) + +val origin = new Point // x et y valent tous les deux 0 +val point1 = new Point(1) +println(point1.x) // prints 1 +``` + +Dans cette version de la classe `Point`, `x` et `y` ont tous les deux une valeur par défaut`0`, donc aucun argument n'est requis. Toutefois, parce que le constructeur lit les arguments de gauche à droite, si vous souhaitez seulement fournir la valeur pour `y`, vous devrez nommer le paramètre. + +```scala mdoc:nest +class Point(var x: Int = 0, var y: Int = 0) +val point2 = new Point(y = 2) +println(point2.y) // prints 2 +``` + +C'est aussi une bonne pratique pour améliorer la clarté du code. + +## Membres privés et Syntaxe Getter/Setter + +Les membres sont publics par défaut. Utilisez le modifieur d'accès `private` +pour cacher les membres en dehors de la classes. + +```scala mdoc:reset +class Point { + private var _x = 0 + private var _y = 0 + private val bound = 100 + + def x = _x + def x_= (newValue: Int): Unit = { + if (newValue < bound) _x = newValue else printWarning + } + + def y = _y + def y_= (newValue: Int): Unit = { + if (newValue < bound) _y = newValue else printWarning + } + + private def printWarning = println("WARNING: Out of bounds") +} + +val point1 = new Point +point1.x = 99 +point1.y = 101 // prints the warning +``` + +Dans cette version de la classe `Point`, les données sont stockées dans les variables privées `_x` et `_y`. Il y a les méthodes `def x` et `def y` pour accéder aux données privées. `def x_=` et `def y_=` servent à valider et remplacer les valeurs de `_x` et `_y`. Notez la syntaxe spéciale des "setters": la méthode a le même nom que la méthode "getter" avec `_=` ajouté, ensuite viennent les paramètres. + +Les paramètres du constructeur avec `val` et `var` sont publics. Cependant, puisque les `val` sont immuables, vous ne pouvez pas écrire ce qui suit. + +```scala mdoc:fail +class Point(val x: Int, val y: Int) +val point = new Point(1, 2) +point.x = 3 // <-- ne compile pas +``` + +Les paramètres sans `val` ou `var` sont des valeurs privées, visibles seulement dans la classe. + +```scala mdoc:fail +class Point(x: Int, y: Int) +val point = new Point(1, 2) +point.x // <-- ne compile pas +``` + +## Plus d'informations + +* Apprennez-en plus à propos des classes dans [Scala Book](/overviews/scala-book/classes.html) +* Comment utiliser les [Auxiliary Class Constructors](/overviews/scala-book/classes-aux-constructors.html) + +Traduction par Antoine Pointeau. \ No newline at end of file From 6132e24b6e8853dab779e534d0bc346dc89abb01 Mon Sep 17 00:00:00 2001 From: Antoine POINTEAU Date: Thu, 2 Dec 2021 16:41:51 +0100 Subject: [PATCH 2/6] fix next page link --- _fr/tour/classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/classes.md b/_fr/tour/classes.md index b42fa47c39..bdb2585230 100644 --- a/_fr/tour/classes.md +++ b/_fr/tour/classes.md @@ -7,7 +7,7 @@ num: 4 language: fr -next-page: traits +next-page: default-parameter-values previous-page: unified-types --- From cb8d59ecbc2923c8bfb6d0b6576b619ce340066f Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Fri, 3 Dec 2021 14:09:56 +0100 Subject: [PATCH 3/6] Update _fr/tour/classes.md Co-authored-by: Jean Helou --- _fr/tour/classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/classes.md b/_fr/tour/classes.md index bdb2585230..203daeb281 100644 --- a/_fr/tour/classes.md +++ b/_fr/tour/classes.md @@ -12,7 +12,7 @@ previous-page: unified-types --- Les classes en Scala sont des plans pour créer des objets. Elle peuvent contenir des méthodes, -des valeurs, des variables, des types, des objets, des traits, et des classes qui sont collectivement appelés _members_. Les types, les objets et les traits seront couvert plus tards dans le tour. +des valeurs, des variables, des types, des objets, des traits, et des classes qui sont collectivement appelés _members_. Les types, les objets et les traits seront couverts plus tards dans le tour. ## Définir une classe From 945aae7b9a4eaaf4bb9f4b5795ca381a20ed6ccf Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Fri, 3 Dec 2021 14:10:12 +0100 Subject: [PATCH 4/6] Update _fr/tour/classes.md Co-authored-by: Jean Helou --- _fr/tour/classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/classes.md b/_fr/tour/classes.md index 203daeb281..2dfa4acd81 100644 --- a/_fr/tour/classes.md +++ b/_fr/tour/classes.md @@ -50,7 +50,7 @@ Contrairement à beaucoup d'autres langages, le constructeur primaire est dans l La méthode `move` prend deux entiers en arguments et retourne la valeur Unit `()`, qui ne comporte aucune information. Cela correspond à-peu-près à `void` dans les langages similaires à Java. `toString`, d'un autre côté, ne prend aucun argument mais retourne une valeur `String`. -Etant donnée que `toString` écrase `toString` qui vient de [`AnyRef`](unified-types.html), elle doit être accompagnée du mot clef `override`. +Étant donné que `toString` surcharge l'implémentation de `toString` fournie par [`AnyRef`](unified-types.html), elle doit être accompagnée du mot clef `override`. ## Les constructeurs From 6360d40e6453adfc7186bf6ba0e0db5977ef2d02 Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Fri, 3 Dec 2021 14:11:18 +0100 Subject: [PATCH 5/6] Update _fr/tour/classes.md Co-authored-by: Jean Helou --- _fr/tour/classes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_fr/tour/classes.md b/_fr/tour/classes.md index 2dfa4acd81..faaa0c6dc7 100644 --- a/_fr/tour/classes.md +++ b/_fr/tour/classes.md @@ -103,7 +103,7 @@ point1.x = 99 point1.y = 101 // prints the warning ``` -Dans cette version de la classe `Point`, les données sont stockées dans les variables privées `_x` et `_y`. Il y a les méthodes `def x` et `def y` pour accéder aux données privées. `def x_=` et `def y_=` servent à valider et remplacer les valeurs de `_x` et `_y`. Notez la syntaxe spéciale des "setters": la méthode a le même nom que la méthode "getter" avec `_=` ajouté, ensuite viennent les paramètres. +Dans cette version de la classe `Point`, les données sont stockées dans les variables privées `_x` et `_y`. Il y a les méthodes `def x` et `def y` pour accéder à ces données. `def x_=` et `def y_=` servent à valider et remplacer les valeurs de `_x` et `_y`. Notez la syntaxe spéciale des "setters": la méthode porte le même nom que la méthode "getter" avec `_=` ajouté, ensuite viennent les paramètres. Les paramètres du constructeur avec `val` et `var` sont publics. Cependant, puisque les `val` sont immuables, vous ne pouvez pas écrire ce qui suit. From 13195c5d97b006b1ca6af1a5e2464b655425474d Mon Sep 17 00:00:00 2001 From: Antoine Pointeau Date: Fri, 3 Dec 2021 14:12:32 +0100 Subject: [PATCH 6/6] Update classes.md --- _fr/tour/classes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_fr/tour/classes.md b/_fr/tour/classes.md index faaa0c6dc7..a3cf48adde 100644 --- a/_fr/tour/classes.md +++ b/_fr/tour/classes.md @@ -11,7 +11,7 @@ next-page: default-parameter-values previous-page: unified-types --- -Les classes en Scala sont des plans pour créer des objets. Elle peuvent contenir des méthodes, +Les classes en Scala sont des modèles pour créer des objets. Elle peuvent contenir des méthodes, des valeurs, des variables, des types, des objets, des traits, et des classes qui sont collectivement appelés _members_. Les types, les objets et les traits seront couverts plus tards dans le tour. ## Définir une classe @@ -126,4 +126,4 @@ point.x // <-- ne compile pas * Apprennez-en plus à propos des classes dans [Scala Book](/overviews/scala-book/classes.html) * Comment utiliser les [Auxiliary Class Constructors](/overviews/scala-book/classes-aux-constructors.html) -Traduction par Antoine Pointeau. \ No newline at end of file +Traduction par Antoine Pointeau.