Skip to content

Commit 4e16e00

Browse files
committed
Conflicts fixed on "Symbol type" page in french language
1 parent ca541d2 commit 4e16e00

File tree

1 file changed

+14
-86
lines changed

1 file changed

+14
-86
lines changed

1-js/04-object-basics/08-symbol/article.md

Lines changed: 14 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11

22
# Type symbole
33

4-
<<<<<<< HEAD
5-
Par spécification, les clés de propriété d'objet peuvent être de type chaîne de caractères ou de type symbole. Pas des nombres, pas des booléens, uniquement des chaînes de caractères ou des symboles.
4+
Par spécification, seuls deux types primitifs peuvent servir de clés de propriété d'objet :
65

7-
Jusqu'à présent, nous n'avons vu que des chaînes de caractères. Voyons maintenant les avantages que les symboles peuvent nous apporter.
8-
=======
9-
By specification, only two primitive types may serve as object property keys:
6+
- type string, ou
7+
- type symbol.
108

11-
- string type, or
12-
- symbol type.
9+
Sinon, si l'on utilise un autre type, tel que nombre, il est automatiquement converti en chaîne de caractères. Ainsi, `obj[1]` est identique à `obj["1"]`, et `obj[true]` est identique à `obj["true"]`.
1310

14-
Otherwise, if one uses another type, such as number, it's autoconverted to string. So that `obj[1]` is the same as `obj["1"]`, and `obj[true]` is the same as `obj["true"]`.
11+
Jusqu'à présent, nous n'utilisions que des chaînes de caractères.
1512

16-
Until now we've been using only strings.
17-
18-
Now let's explore symbols, see what they can do for us.
19-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
13+
Explorons maintenant les symboles, voyons ce qu'ils peuvent faire pour nous.
2014

2115
## Symboles
2216

@@ -25,29 +19,17 @@ Un “Symbol” représente un identifiant unique.
2519
Une valeur de ce type peut être créée en utilisant `Symbol()` :
2620

2721
```js
28-
<<<<<<< HEAD
29-
// id est un nouveau symbole
30-
let id = Symbol();
31-
```
32-
33-
Lors de la création, nous pouvons donner à symbole une description (également appelée nom de symbole), particulièrement utile pour le débogage :
34-
=======
3522
let id = Symbol();
3623
```
3724

38-
Upon creation, we can give symbols a description (also called a symbol name), mostly useful for debugging purposes:
39-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
25+
Lors de la création, nous pouvons donner au symbole une description (également appelée nom de symbole), particulièrement utile pour le débogage :
4026

4127
```js
4228
// id est un symbole avec la description "id"
4329
let id = Symbol("id");
4430
```
4531

46-
<<<<<<< HEAD
4732
Les symboles sont garantis d'être uniques. Même si nous créons beaucoup de symboles avec la même description, ce sont des valeurs différentes. La description est juste une étiquette qui n’affecte rien.
48-
=======
49-
Symbols are guaranteed to be unique. Even if we create many symbols with exactly the same description, they are different values. The description is just a label that doesn't affect anything.
50-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
5133

5234
Par exemple, voici deux symboles avec la même description -- ils ne sont pas égaux :
5335

@@ -62,15 +44,10 @@ alert(id1 == id2); // false
6244

6345
Si vous connaissez Ruby ou un autre langage qui comporte également une sorte de "symboles", attention à ne pas vous tromper. Les symboles JavaScript sont différents.
6446

65-
<<<<<<< HEAD
47+
Donc, pour résumer, un symbole est une "valeur unique primitive" avec une description facultative. Voyons où nous pouvons les utiliser.
48+
6649
````warn header="Les symboles ne se convertissent pas automatiquement en chaîne de caractères"
6750
La plupart des valeurs de JavaScript prennent en charge la conversion implicite en chaîne de caractères. Par exemple, nous pouvons `alert` presque toutes les valeurs et cela fonctionnera. Les symboles sont spéciaux. Ils ne se convertissent pas automatiquement.
68-
=======
69-
So, to summarize, a symbol is a "primitive unique value" with an optional description. Let's see where we can use them.
70-
71-
````warn header="Symbols don't auto-convert to a string"
72-
Most values in JavaScript support implicit conversion to a string. For instance, we can `alert` almost any value, and it will work. Symbols are special. They don't auto-convert.
73-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
7451
7552
Par exemple, cette `alert` affichera une erreur :
7653
@@ -80,29 +57,18 @@ let id = Symbol("id");
8057
alert(id); // TypeError: Impossible de convertir une valeur de symbole en chaîne de caractères
8158
*/!*
8259
```
83-
C'est un "garde du langage" contre les erreurs, parce que les chaînes de caractères et les symboles sont fondamentalement différents et ne doivent accidentellement pas être convertis les uns en les autres.
60+
C'est un "gardien du langage" contre les erreurs, parce que les chaînes de caractères et les symboles sont fondamentalement différents et ne doivent accidentellement pas être convertis les uns en les autres.
8461
85-
<<<<<<< HEAD
8662
Si nous voulons vraiment afficher un symbole, nous devons appeler `.toString()` dessus, comme ici :
87-
=======
88-
That's a "language guard" against messing up, because strings and symbols are fundamentally different and should not accidentally convert one into another.
8963
90-
If we really want to show a symbol, we need to explicitly call `.toString()` on it, like here:
91-
92-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
9364
```js run
9465
let id = Symbol("id");
9566
*!*
9667
alert(id.toString()); // Symbol(id), maintenant ça marche
9768
*/!*
9869
```
99-
<<<<<<< HEAD
10070
Ou récupérer la propriété `symbol.description` pour afficher la description uniquement :
101-
=======
102-
103-
Or get `symbol.description` property to show the description only:
10471
105-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
10672
```js run
10773
let id = Symbol("id");
10874
*!*
@@ -114,12 +80,7 @@ alert(id.description); // id
11480

11581
## Propriétés "cachées"
11682

117-
<<<<<<< HEAD
11883
Les symboles nous permettent de créer des propriétés "cachées" d'un objet, qu'aucune autre partie du code ne peut accéder accidentellement ou écraser.
119-
=======
120-
121-
Symbols allow us to create "hidden" properties of an object, that no other part of code can accidentally access or overwrite.
122-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
12384

12485
Par exemple, si nous travaillons avec des objets `user` qui appartiennent à un code tiers, nous aimerions leur ajouter des identificateurs.
12586

@@ -139,17 +100,11 @@ alert( user[id] ); // nous pouvons accéder aux données en utilisant le symbole
139100

140101
Quel est l’avantage de l’utilisation de `Symbol("id")` sur une chaîne de caractères `"id"` ?
141102

142-
<<<<<<< HEAD
143103
Poussons un peu plus loin l’exemple pour voir cela.
144104

145-
Comme les objets `user` appartiennent à un autre code et que ce code fonctionne également avec eux, nous ne devrions pas simplement y ajouter de champs. C’est dangereux. Cependant, il est parfois impossible d’accéder à un symbole. Mais un symbole ne peut pas être accédé accidentellement, le code tiers ne le verra probablement même pas, il est donc probablement correct de le faire.
146-
=======
147-
As `user` objects belong to another codebase, it's unsafe to add fields to them, since we might affect pre-defined behavior in that other codebase. However, symbols cannot be accessed accidentally. The third-party code won't be aware of newly defined symbols, so it's safe to add symbols to the `user` objects.
105+
Comme les objets `user` appartiennent à une autre base de code, il n'est pas sûr de leur ajouter des champs, car nous pourrions affecter le comportement prédéfini dans cette autre base de code. Cependant, les symboles ne peuvent pas être accédés accidentellement. Le code tiers ne sera pas conscient des symboles nouvellement définis, il est donc prudent d'ajouter des symboles aux objets `user`.
148106

149-
Also, imagine that another script wants to have its own identifier inside `user`, for its own purposes.
150-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
151-
152-
Imaginez qu'un autre script veuille avoir son propre identifiant à l'intérieur de `user`, pour sa propre utilisation. Cela peut être une autre bibliothèque JavaScript, donc les scripts ne sont absolument pas conscients les uns des autres.
107+
Imaginez qu'un autre script veuille avoir son propre identifiant à l'intérieur de `user`, pour sa propre utilisation.
153108

154109
Ensuite, ce script peut créer son propre `symbol("id")`, comme ceci :
155110

@@ -213,13 +168,8 @@ let user = {
213168
for (let key in user) alert(key); // name, age (pas de symboles)
214169
*/!*
215170

216-
<<<<<<< HEAD
217171
// l'accès direct par le symbole fonctionne
218-
alert( "Direct: " + user[id] );
219-
=======
220-
// the direct access by the symbol works
221172
alert( "Direct: " + user[id] ); // Direct: 123
222-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
223173
```
224174

225175
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) les ignore également. Cela fait partie du principe général du "dissimulation des propriétés symboliques". Si un autre script ou une bibliothèque parcourt notre objet, il n’accédera pas de manière inattendue à une propriété symbolique.
@@ -267,20 +217,12 @@ Les symboles à l'intérieur de ce registre sont appelés *symboles globaux*. Si
267217
```smart header="Cela ressemble à Ruby"
268218
Dans certains langages de programmation, comme Ruby, il existe un seul symbole par nom.
269219
270-
<<<<<<< HEAD
271-
Comme nous pouvons le constater, en JavaScript, c’est bien pour les symboles globaux.
272-
=======
273-
In JavaScript, as we can see, that's true for global symbols.
274-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
220+
Comme nous pouvons le constater, en JavaScript, c’est vrai pour les symboles globaux.
275221
```
276222

277223
### Symbol.keyFor
278224

279-
<<<<<<< HEAD
280-
Pour les symboles globaux, pas seulement `Symbol.for(key)` renvoie un symbole par son nom, mais il existe un appel inversé : `Symbol.keyFor(sym)`, cela fait l'inverse: retourne un nom par un symbole global.
281-
=======
282-
We have seen that for global symbols, `Symbol.for(key)` returns a symbol by name. To do the opposite -- return a name by global symbol -- we can use: `Symbol.keyFor(sym)`:
283-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
225+
Nous avons vu que pour les symboles globaux, `Symbol.for(key)` renvoie un symbole par son nom. Pour faire le contraire -- retourner un nom par symbole global -- nous pouvons utiliser : `Symbol.keyFor(sym)` :
284226

285227
Par exemple :
286228

@@ -296,11 +238,7 @@ alert( Symbol.keyFor(sym2) ); // id
296238

297239
`Symbol.keyFor` utilise en interne le registre de symboles global pour rechercher la clé du symbole. Donc, cela ne fonctionne pas pour les symboles non globaux. Si le symbole n’est pas global, il ne pourra pas le trouver et retournera `undefined`.
298240

299-
<<<<<<< HEAD
300241
Cela dit, tous les symboles ont la propriété `description`.
301-
=======
302-
That said, all symbols have the `description` property.
303-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
304242

305243
Par exemple :
306244

@@ -341,21 +279,11 @@ Les multiples appels de `Symbol.for` avec la même `key` renvoient exactement le
341279

342280
Les symboles ont deux principaux cas d'utilisation :
343281

344-
<<<<<<< HEAD
345282
1. Propriétés d'objet "masquées".
346283
Si nous voulons ajouter une propriété à un objet qui "appartient" à un autre script ou à une librairie, nous pouvons créer un symbole et l'utiliser comme clé de propriété. Une propriété symbolique n’apparait pas dans `for..in`, elle ne sera donc pas traitée accidentellement avec d'autres propriétés. De plus, elle ne sera pas accessible directement, car un autre script n’a pas notre symbole. Ainsi, la propriété sera protégée contre une utilisation accidntelle ou un écrasement.
347-
=======
348-
1. "Hidden" object properties.
349-
350-
If we want to add a property into an object that "belongs" to another script or a library, we can create a symbol and use it as a property key. A symbolic property does not appear in `for..in`, so it won't be accidentally processed together with other properties. Also it won't be accessed directly, because another script does not have our symbol. So the property will be protected from accidental use or overwrite.
351-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
352284

353285
Ainsi, nous pouvons "dissimuler" quelque chose dans des objets dont nous avons besoin, mais que les autres ne devraient pas voir, en utilisant des propriétés symboliques.
354286

355287
2. De nombreux symboles système utilisés par JavaScript sont accessibles en tant que `Symbol.*`. Nous pouvons les utiliser pour modifier certains comportements internes. Par exemple, plus tard dans le tutoriel, nous utiliserons `Symbol.iterator` pour [iterables](info:iterable), `Symbol.toPrimitive` etc.
356288

357-
<<<<<<< HEAD
358289
Techniquement, les symboles ne sont pas cachés à 100%. Il y a une méthode intégrée [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) qui nous permet d’obtenir tous les symboles. Il y a aussi une méthode nommée [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) qui renvoie *toutes* les clés d'un objet, y compris celles symboliques. Donc, ils ne sont pas vraiment cachés. Mais la plupart des bibliothèques, fonctions intégrées et structures de syntaxe n'utilisent pas ces méthodes.
359-
=======
360-
Technically, symbols are not 100% hidden. There is a built-in method [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) that allows us to get all symbols. Also there is a method named [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) that returns *all* keys of an object including symbolic ones. But most libraries, built-in functions and syntax constructs don't use these methods.
361-
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c

0 commit comments

Comments
 (0)