Skip to content

Commit c40c177

Browse files
authored
Merge pull request #262 from HachemiH/master
Conflicts fixed after sync with upstream @ 99e59ba
2 parents c653d1a + 1f557d3 commit c40c177

File tree

35 files changed

+334
-407
lines changed

35 files changed

+334
-407
lines changed

1-js/01-getting-started/1-intro/article.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,7 @@ Les exemples de telles restrictions sont:
6767

6868
Les navigateurs modernes lui permettent de fonctionner avec des fichiers, mais l'accès est limité et n'est fourni que si l'utilisateur effectue certaines actions, comme «déposer» un fichier dans une fenêtre de navigateur ou le sélectionner via une balise `<input>`.
6969

70-
<<<<<<< HEAD
7170
Il existe des moyens d’interagir avec une webcam/microphone et d’autres appareils, mais ils nécessitent une autorisation explicite de l’utilisateur. Ainsi, une page compatible avec JavaScript ne permet pas d'activer une caméra Web, d'observer l'environnement et d'envoyer les informations à la [NSA](https://fr.wikipedia.org/wiki/National_Security_Agency).
72-
=======
73-
There are ways to interact with camera/microphone and other devices, but they require a user's explicit permission. So a JavaScript-enabled page may not sneakily enable a web-camera, observe the surroundings and send the information to the [NSA](https://en.wikipedia.org/wiki/National_Security_Agency).
74-
- Different tabs/windows generally do not know about each other. Sometimes they do, for example when one window uses JavaScript to open the other one. But even in this case, JavaScript from one page may not access the other if they come from different sites (from a different domain, protocol or port).
75-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
7671

7772
- Différents onglets / fenêtres ne se connaissent généralement pas. Parfois, ils se croisent, par exemple lorsqu'une fenêtre utilise JavaScript pour ouvrir l'autre. Mais même dans ce cas, le JavaScript d'une page ne peut pas accéder à l'autre si elle provient de sites différents (provenant d'un autre domaine, protocole ou port).
7873

1-js/01-getting-started/4-devtools/article.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@ Pour voir les erreurs et obtenir beaucoup d’informations utiles sur les script
88

99
Le plus souvent, les développeurs se tournent vers Chrome ou Firefox pour le développement, car ces navigateurs disposent des meilleurs outils de développement. D'autres navigateurs fournissent également des outils de développement, parfois dotés de fonctions spéciales, mais jouent généralement le rôle de "rattrapage" pour Chrome ou Firefox. Donc, la plupart des gens ont un navigateur "favori" et passent à d'autres si un problème est spécifique au navigateur.
1010

11-
<<<<<<< HEAD
12-
Les outils de développement sont très puissants, il existe de nombreuses fonctionnalités. Pour commencer, nous allons apprendre à les ouvrir, à examiner les erreurs et à exécuter des commandes JavaScript.
13-
=======
14-
Developer tools are potent, they have many features. To start, we'll learn how to open them, look at errors, and run JavaScript commands.
15-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
11+
Les outils de développement sont très puissants, ils possèdent de nombreuses fonctionnalités. Pour commencer, nous allons apprendre à les ouvrir, à examiner les erreurs et à exécuter des commandes JavaScript.
1612

1713
## Google Chrome
1814

1-js/03-code-quality/06-polyfills/article.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,8 @@ Actuellement, Babel comporte deux parties :
2323

2424
2. Ensuite, le polyfill.
2525

26-
<<<<<<< HEAD
27-
Les nouvelles fonctionnalités du langage peuvent inclure de nouvelles fonctions intégrées et de nouvelles constructions de syntaxe. Le transpiler réécrit le code en transformant les nouvelles constructions de syntaxe en anciennes. Mais en ce qui concerne les nouvelles fonctions intégrées, nous devons les implémenter. JavaScript est un langage très dynamique, les scripts peuvent ajouter / modifier n’importe quelle fonction, afin qu’ils se comportent conformément au standard moderne.
28-
=======
29-
New language features may include not only syntax constructs, but also built-in functions.
30-
The transpiler rewrites the code, transforming syntax constructs into older ones. But as for new built-in functions, we need to implement them. JavaScript is a highly dynamic language, scripts may add/modify any functions, so that they behave according to the modern standard.
31-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
26+
Les nouvelles fonctionnalités du langage peuvent inclure de nouvelles fonctions intégrées et de nouvelles constructions de syntaxe.
27+
Le transpiler réécrit le code en transformant les nouvelles constructions de syntaxe en anciennes. Mais en ce qui concerne les nouvelles fonctions intégrées, nous devons les implémenter. JavaScript est un langage très dynamique, les scripts peuvent ajouter / modifier n’importe quelle fonction, afin qu’ils se comportent conformément au standard moderne.
3228

3329
Un script qui met à jour / ajoute de nouvelles fonctions s'appelle "polyfill". Il "comble" le vide et ajoute les implémentations manquantes.
3430

1-js/04-object-basics/03-garbage-collection/article.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,7 @@ En termes simples, les valeurs "accessibles" sont celles qui sont accessibles ou
2323

2424
2. Toute autre valeur est considérée comme accessible si elle est accessible depuis une racine par une référence ou par une chaîne de références.
2525

26-
<<<<<<< HEAD
27-
Par exemple, s’il existe un objet dans une variable globale et que cet objet a une propriété référençant un autre objet, cet objet est considéré comme accessible. Et ceux auxquels il fait référence sont également accessibles. Des exemples détaillés à suivre.
28-
=======
29-
For instance, if there's an object in a global variable, and that object has a property referencing another object, *that* object is considered reachable. And those that it references are also reachable. Detailed examples to follow.
30-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
26+
Par exemple, s’il existe un objet dans une variable globale et que cet objet a une propriété référençant un autre objet, *cet* objet est considéré comme accessible. Et ceux auxquels il fait référence sont également accessibles. Des exemples détaillés à suivre.
3127

3228
Il existe un processus d’arrière-plan dans le moteur JavaScript appelé [Ramasse-miettes (Garbage Collector)](https://fr.wikipedia.org/wiki/Ramasse-miettes_(informatique)). Il surveille tous les objets et supprime ceux qui sont devenus inaccessibles.
3329

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 31 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -12,135 +12,95 @@ Le chaînage optionnel `?.` Est un moyen sécurisé d'accéder aux propriétés
1212

1313
Si vous venez de commencer à lire le tutoriel et à apprendre JavaScript, peut-être que le problème ne vous a pas encore touché, mais c'est assez courant.
1414

15-
<<<<<<< HEAD
1615

17-
À titre d'exemple, considérons les objets pour les données utilisateur. La plupart de nos utilisateurs ont des adresses dans la propriété `user.address`, avec la rue `user.address.street`, mais certains ne les ont pas fournies.
18-
Dans ce cas, lorsque nous tentons d'obtenir `user.address.street`, nous obtenons une erreur :
16+
À titre d'exemple, disons que nous avons des objets `user` qui contiennent les informations sur nos utilisateurs.
1917

20-
```js run
21-
let user = {}; // l'utilisateur sans propriété "address"
22-
23-
=======
24-
As an example, let's say we have `user` objects that hold the information about our users.
25-
26-
Most of our users have addresses in `user.address` property, with the street `user.address.street`, but some did not provide them.
18+
La plupart de nos utilisateurs ont des adresses dans la propriété `user.address`, avec la rue `user.address.street`, mais certains ne les ont pas fournies.
2719

28-
In such case, when we attempt to get `user.address.street`, and the user happens to be without an address, we get an error:
20+
Dans ce cas, lorsque nous essayons d'obtenir `user.address.street`, et que l'utilisateur se trouve sans adresse, nous obtenons une erreur :
2921

3022
```js run
31-
let user = {}; // a user without "address" property
32-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
23+
let user = {}; // un utilisateur sans propriété "address"
24+
3325

3426
alert(user.address.street); // Error!
3527
```
3628

37-
<<<<<<< HEAD
38-
39-
C'est le résultat attendu, JavaScript fonctionne comme ça, mais dans de nombreux cas pratiques, nous préférerions obtenir `undefined` au lieu d'une erreur (signifiant "pas de rue").
29+
C'est le résultat attendu. JavaScript fonctionne comme ça. Comme `user.address` est `undefined`, une tentative d'obtention de `user.address.street` échoue avec une erreur.
4030

41-
... Et un autre exemple. Dans le développement Web, nous pouvons avoir besoin d'obtenir une information sur un élément de la page, qui n'existe parfois pas:
31+
Dans de nombreux cas pratiques, nous préférerions obtenir `undefined` au lieu d'une erreur ici (signifiant "pas de rue").
4232

33+
... Et un autre exemple. Dans le développement Web, nous pouvons obtenir un objet qui correspond à un élément de page Web à l'aide d'un appel de méthode spécial, tel que `document.querySelector('.elem')`, et il renvoie `null` lorsqu'il n'y a pas ce type d'élément.
4334

4435
```js run
45-
// Erreur si le résultat de querySelector(...) est null
46-
let html = document.querySelector('.my-element').innerHTML;
47-
```
48-
49-
Avant l'apparition de `?.` Dans le langage, l'opérateur `&&` était utilisé pour contourner ce problème.
50-
51-
Par exemple :
52-
=======
53-
That's the expected result. JavaScript works like this. As `user.address` is `undefined`, an attempt to get `user.address.street` fails with an error.
54-
55-
In many practical cases we'd prefer to get `undefined` instead of an error here (meaning "no street").
56-
57-
...And another example. In the web development, we can get an object that corresponds to a web page element using a special method call, such as `document.querySelector('.elem')`, and it returns `null` when there's no such element.
58-
59-
```js run
60-
// document.querySelector('.elem') is null if there's no element
36+
// document.querySelector('.elem') est nul s'il n'y a pas d'élément
6137
let html = document.querySelector('.elem').innerHTML; // error if it's null
6238
```
6339

64-
Once again, if the element doesn't exist, we'll get an error accessing `.innerHTML` of `null`. And in some cases, when the absence of the element is normal, we'd like to avoid the error and just accept `html = null` as the result.
40+
Encore une fois, si l'élément n'existe pas, nous obtiendrons une erreur lors de l'accès à `.innerHTML` de` null`. Et dans certains cas, lorsque l'absence de l'élément est normale, nous aimerions éviter l'erreur et accepter simplement `html = null` comme résultat.
6541

66-
How can we do this?
42+
Comment peut-on le faire ?
6743

68-
The obvious solution would be to check the value using `if` or the conditional operator `?`, before accessing its property, like this:
44+
La solution évidente serait de vérifier la valeur en utilisant `if` ou l'opérateur conditionnel `?`, Avant d'accéder à sa propriété, comme ceci :
6945

7046
```js
7147
let user = {};
7248

7349
alert(user.address ? user.address.street : undefined);
7450
```
7551

76-
It works, there's no error... But it's quite inelegant. As you can see, the `"user.address"` appears twice in the code. For more deeply nested properties, that becomes a problem as more repetitions are required.
52+
Cela fonctionne, il n'y a pas d'erreur ... Mais c'est assez inélégant. Comme vous pouvez le voir, `"user.address"` apparaît deux fois dans le code. Pour des propriétés plus profondément imbriquées, cela devient un problème car plus de répétitions sont nécessaires.
7753

78-
E.g. let's try getting `user.address.street.name`.
54+
Par exemple. essayons d'obtenir `user.address.street.name`.
7955

80-
We need to check both `user.address` and `user.address.street`:
56+
Nous devons vérifier à la fois `user.address` et `user.address.street` :
8157

8258
```js
83-
let user = {}; // user has no address
59+
let user = {}; // l'utilisateur n'a pas d'adresse
8460

8561
alert(user.address ? user.address.street ? user.address.street.name : null : null);
8662
```
8763

88-
That's just awful, one may even have problems understanding such code.
64+
C'est juste horrible, on peut même avoir des problèmes pour comprendre un tel code.
8965

90-
Don't even care to, as there's a better way to write it, using the `&&` operator:
91-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
66+
Ne vous en souciez même pas, car il existe une meilleure façon de l'écrire, en utilisant l'opérateur `&&` :
9267

9368
```js run
9469
let user = {}; // l'utilisateur n'a pas d'adresse
9570

9671
alert( user.address && user.address.street && user.address.street.name ); // undefined (no error)
9772
```
9873

99-
<<<<<<< HEAD
100-
=======
101-
AND'ing the whole path to the property ensures that all components exist (if not, the evaluation stops), but also isn't ideal.
74+
Et le chemin complet vers la propriété garantit que tous les composants existent (sinon, l'évaluation s'arrête), mais n'est pas non plus idéal.
10275

103-
As you can see, property names are still duplicated in the code. E.g. in the code above, `user.address` appears three times.
76+
Comme vous pouvez le voir, les noms de propriétés sont toujours dupliqués dans le code. Par exemple. dans le code ci-dessus, `user.address` apparaît trois fois.
10477

105-
That's why the optional chaining `?.` was added to the language. To solve this problem once and for all!
106-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
78+
C'est pourquoi le chaînage facultatif `?.` A été ajouté au langage. Pour résoudre ce problème une fois pour toutes !
10779

10880
ET l'ensemble du chemin d'accès à la propriété garantit que tous les composants existent (sinon, l'évaluation s'arrête), mais est difficile à écrire.
10981

11082

11183
## Chaînage optionnel
11284

113-
<<<<<<< HEAD
114-
Le chaînage facultatif `?.` Arrête l'évaluation et renvoie `undefined` si la partie avant `?.` est `undefined` ou `null`.
115-
=======
116-
The optional chaining `?.` stops the evaluation if the part before `?.` is `undefined` or `null` and returns that part.
117-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
85+
Le chaînage facultatif `?.` arrête l'évaluation et renvoie `undefined` si la partie avant `?.` est `undefined` ou `null` et renvoie cette partie.
11886

11987
**Plus loin dans cet article, par souci de brièveté, nous dirons que quelque chose "existe" si ce n'est pas "null" et non "undefined".**
12088

121-
<<<<<<< HEAD
122-
Voici le moyen sûr d'accéder `user.address.street` :
123-
=======
124-
In other words, `value?.prop`:
125-
- is the same as `value.prop` if `value` exists,
126-
- otherwise (when `value` is `undefined/null`) it returns `undefined`.
89+
En d'autres termes, `value?.prop` :
90+
- est identique à `value.prop` si `value` existe,
91+
- sinon (lorsque `value` est `undefined/nul`), il renvoie `undefined`.
12792

128-
Here's the safe way to access `user.address.street` using `?.`:
129-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
93+
Voici le moyen sûr d'accéder à `user.address.street` en utilisant `?.` :
13094

13195
```js run
13296
let user = {}; // l'utilisateur n'a pas d'adresse
13397

13498
alert( user?.address?.street ); // undefined (no error)
13599
```
136100
137-
<<<<<<< HEAD
138-
La lecture de l'adresse avec `user?.address` fonctionne même si l'objet `user` n'existe pas :
139-
=======
140-
The code is short and clean, there's no duplication at all.
101+
Le code est court et propre, il n'y a aucune duplication.
141102
142-
Reading the address with `user?.address` works even if `user` object doesn't exist:
143-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
103+
La lecture de l'adresse avec `user?.address` fonctionne même si l'objet `user` n'existe pas :
144104
145105
```js run
146106
let user = null;
@@ -151,25 +111,12 @@ alert( user?.address.street ); // undefined
151111
152112
Remarque: la syntaxe `?.` Rend facultative la valeur qui la précède, mais pas plus.
153113
154-
<<<<<<< HEAD
155-
Dans l'exemple ci-dessus, `user?.` Permet uniquement à `user` d'être `null/undefined`.
156-
157-
D'un autre côté, si `user` existe, alors il doit avoir la propriété `user.address`, sinon `user?.address.street` donne une erreur au deuxième point.
158-
=======
159-
E.g. in `user?.address.street.name` the `?.` allows `user` to be `null/undefined`, but it's all it does. Further properties are accessed in a regular way. If we want some of them to be optional, then we'll need to replace more `.` with `?.`.
160-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
114+
Par exemple. dans `user?.address.street.name` le `?.` permet à `user` d'être `null/undefined`, mais c'est tout ce qu'il fait. D'autres propriétés sont accessibles de manière régulière. Si nous voulons que certains d'entre eux soient optionnels, alors nous devrons remplacer plus de `.` par `?.`.
161115
162116
```warn header="N'abusez pas du chaînage optionnel"
163117
Nous ne devrions utiliser `?.` que là où il est normal que quelque chose n'existe pas.
164118
165-
<<<<<<< HEAD
166-
Par exemple, si selon notre logique de codage, l'objet `user` doit être là, mais que `address` est facultatif, alors `user.address?.street` serait mieux.
167-
168-
169-
Donc, si `user` n'est pas défini en raison d'une erreur, nous verrons une erreur de programmation à ce sujet et la corrigerons. Sinon, les erreurs de codage peuvent être réduites au silence lorsqu'elles ne sont pas appropriées et devenir plus difficiles à déboguer.
170-
=======
171-
For example, if according to our coding logic `user` object must exist, but `address` is optional, then we should write `user.address?.street`, but not `user?.address?.street`.
172-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
119+
Par exemple, si selon notre logique de codage, l'objet `user` doit exister, mais que `address` est facultatif, alors nous devrions écrire `user.address?.street`, mais pas `user?.address?.street`.
173120

174121
```
175122
@@ -180,13 +127,7 @@ S'il n'y a pas du tout de variable `user`, alors `user?.anything` déclenche une
180127
// ReferenceError: user is not defined
181128
user?.address;
182129
```
183-
<<<<<<< HEAD
184-
185-
Il doit y avoir une déclaration (par exemple `let/const/var user`). Le chaînage optionnel ne fonctionne que pour les variables déclarées.
186-
187-
=======
188-
The variable must be declared (e.g. `let/const/var user` or as a function parameter). The optional chaining works only for declared variables.
189-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
130+
La variable doit être déclarée (par exemple `let/const/var user` ou en tant que paramètre de fonction). Le chaînage facultatif ne fonctionne que pour les variables déclarées.
190131
````
191132

192133
## Court-circuit

1-js/05-data-types/02-number/article.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -408,13 +408,9 @@ Quelques exemples:
408408
alert( Math.pow(2, 10) ); // 2 puissance 10 = 1024
409409
```
410410
411-
<<<<<<< HEAD
412411
Il y a plus de fonctions et de constantes dans l'objet Math, y compris la trigonométrie, que vous pouvez trouver dans la [documentation de l'objet Math](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math).
413412
414413
## Résumé
415-
=======
416-
There are more functions and constants in `Math` object, including trigonometry, which you can find in the [docs for the Math object](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Math).
417-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
418414
419415
Pour écrire de nombres avec beaucoup de zéros :
420416

1-js/05-data-types/05-array-methods/2-filter-range/task.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@ importance: 4
44

55
# Filter range
66

7-
<<<<<<< HEAD
8-
Ecrivez une fonction `filterRange(arr, a, b)` qui obtient un tableau `arr`, recherche les éléments compris entre `a` et `b` et retourne un tableau.
9-
=======
10-
Write a function `filterRange(arr, a, b)` that gets an array `arr`, looks for elements with values higher or equal to `a` and lower or equal to `b` and return a result as an array.
11-
>>>>>>> 99e59ba611ab11319ef9d0d66734b0bea2c3f058
7+
Ecrivez une fonction `filterRange(arr,a,b)` qui obtient un tableau `arr`, recherche les éléments avec des valeurs supérieures ou égales à `a` et inférieures ou égales à `b` et retourne un résultat sous forme de tableau.
128

139
La fonction ne doit pas modifier le tableau. Elle doit juste retourner le nouveau tableau.
1410

0 commit comments

Comments
 (0)