Skip to content

Commit 444c6f1

Browse files
authored
Merge pull request #277 from javascript-tutorial/sync-468e3552
Sync with upstream @ 468e355
2 parents b981378 + 7a23546 commit 444c6f1

File tree

21 files changed

+454
-62
lines changed

21 files changed

+454
-62
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,20 @@ Les outils modernes rendent la [transpilation](https://fr.wiktionary.org/wiki/tr
109109

110110
Les exemples de ce genre de langages :
111111

112+
<<<<<<< HEAD
112113
- [CoffeeScript](http://coffeescript.org/) est un "sucre syntaxique" pour JavaScript, il introduit une syntaxe plus courte, permettant d’écrire du code plus précis et plus clair. Habituellement, les développeurs Ruby l'aiment bien.
113114
- [TypeScript](http://www.typescriptlang.org/) se concentre sur l'ajout de "typage strict des données" pour simplifier le développement et la prise en charge de systèmes complexes. Il est développé par Microsoft.
114115
- [Flow](http://flow.org/) ajoute également la saisie de données, mais de manière différente. Développé par Facebook.
115116
- [Dart](https://www.dartlang.org/) est un langage autonome doté de son propre moteur qui s'exécute dans des environnements autres que les navigateurs (comme les applications mobiles), mais peut aussi être transpilé en JavaScript. Développé par Google.
116117
- [Brython](https://brython.info/) est un transpilateur Python vers JavaScript qui permet d'écrire des applications en Python pur sans JavaScript.
118+
=======
119+
- [CoffeeScript](http://coffeescript.org/) is a "syntactic sugar" for JavaScript. It introduces shorter syntax, allowing us to write clearer and more precise code. Usually, Ruby devs like it.
120+
- [TypeScript](http://www.typescriptlang.org/) is concentrated on adding "strict data typing" to simplify the development and support of complex systems. It is developed by Microsoft.
121+
- [Flow](http://flow.org/) also adds data typing, but in a different way. Developed by Facebook.
122+
- [Dart](https://www.dartlang.org/) is a standalone language that has its own engine that runs in non-browser environments (like mobile apps), but also can be transpiled to JavaScript. Developed by Google.
123+
- [Brython](https://brython.info/) is a Python transpiler to JavaScript that enables the writing of applications in pure Python without JavaScript.
124+
- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) is a modern, concise and safe programming language that can target the browser or Node.
125+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
117126
118127
Il en existe évidemment bien plus, cela dit, même si nous utilisons un de ces langages, nous devrions également connaître le langage JavaScript, pour bien comprendre ce que nous faisons.
119128

1-js/02-first-steps/08-operators/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,11 @@ alert( x ); // 5
220220

221221
Le fait que `=` soit un opérateur, pas une construction de langage "magique" a une implication intéressante.
222222

223+
<<<<<<< HEAD
223224
La plupart des opérateurs en JavaScript renvoient une valeur. C'est évident pour `+` et `-`, mais aussi vrai pour `=`.
225+
=======
226+
All operators in JavaScript return a value. That's obvious for `+` and `-`, but also true for `=`.
227+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
224228

225229
L'appel `x = valeur` écrit la` valeur` dans `x` *puis la renvoie*.
226230

1-js/02-first-steps/18-javascript-specials/article.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,9 +272,15 @@ Nous avons couvert trois manières de créer une fonction en JavaScript :
272272
```
273273
274274
275+
<<<<<<< HEAD
275276
- Les fonctions peuvent avoir des variables locales: celles déclarées dans son corps. De telles variables ne sont visibles qu'à l'intérieur de la fonction.
276277
- Les paramètres peuvent avoir des valeurs par défaut : `function sum(a = 1, b = 2) {...}`.
277278
- Les fonctions retournent toujours quelque chose. Si aucune instruction `return` n’est renvoyée, le résultat est `undefined`.
279+
=======
280+
- Functions may have local variables: those declared inside its body or its parameter list. Such variables are only visible inside the function.
281+
- Parameters can have default values: `function sum(a = 1, b = 2) {...}`.
282+
- Functions always return something. If there's no `return` statement, then the result is `undefined`.
283+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
278284

279285
Details : voir <info:function-basics>, <info:arrow-functions-basics>.
280286

1-js/03-code-quality/01-debugging-chrome/article.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,13 @@ Il y a des boutons pour cela en haut du volet de droite. Actionnons-les.
134134

135135
En cliquant dessus encore et encore, vous parcourrez toutes les instructions de script une par une.
136136

137+
<<<<<<< HEAD
137138
<span class="devtools" style="background-position:-62px -192px"></span> -- "Step over": lance la commande suivante, mais *n'entre pas dans une fonction*, raccourci clavier `key:F10`.
138139
: Semblable à la précédente commande "Step", mais se comporte différemment si l'instruction suivante est un appel de fonction. C’est-à-dire qu’il ne s’agit pas d’une fonction intégrée, comme `alert`, mais d’une fonction propre.
140+
=======
141+
<span class="devtools" style="background-position:-62px -192px"></span> -- "Step over": run the next command, but *don't go into a function*, hotkey `key:F10`.
142+
: Similar to the previous "Step" command, but behaves differently if the next statement is a function call. That is: not a built-in, like `alert`, but a function of our own.
143+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
139144
140145
La commande "Step" y pénètre et met en pause l'exécution à la première ligne, tandis que "Step over" exécute l'appel de fonction imbriqué de manière invisible, en ignorant les éléments internes de la fonction.
141146

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,7 @@ Une chaîne de `?.` permet d'accéder en toute sécurité aux propriétés imbri
236236

237237
Néanmoins, nous devons appliquer «?.» Avec soin, uniquement s'il est acceptable que la partie gauche n'existe pas. Pour ne pas nous cacher les erreurs de programmation, si elles se produisent.
238238

239+
<<<<<<< HEAD
240+
=======
241+
Still, we should apply `?.` carefully, only where it's acceptable that the left part doesn't exist. So that it won't hide programming errors from us, if they occur.
242+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,11 @@ JavaScript a un objet [Math](https://developer.mozilla.org/fr/docs/Web/JavaScrip
385385
Quelques exemples:
386386
387387
`Math.random()`
388+
<<<<<<< HEAD
388389
: Retourne un nombre aléatoire de 0 à 1 (1 non compris)
390+
=======
391+
: Returns a random number from 0 to 1 (not including 1).
392+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
389393
390394
```js run
391395
alert( Math.random() ); // 0.1234567894322
@@ -401,8 +405,13 @@ Quelques exemples:
401405
alert( Math.min(1, 2) ); // 1
402406
```
403407
408+
<<<<<<< HEAD
404409
`Math.pow(n, puissance)`
405410
: Retourne `n` par la puissance donnée
411+
=======
412+
`Math.pow(n, power)`
413+
: Returns `n` raised to the given power.
414+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
406415
407416
```js run
408417
alert( Math.pow(2, 10) ); // 2 puissance 10 = 1024

1-js/05-data-types/06-iterable/article.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,11 @@ Lorsque nous utilisons JavaScript pour des tâches pratiques dans un navigateur
174174

175175
Par exemple, les chaînes de caractères sont à la fois iterables (`for..of` fonctionne dessus) et des array-likes (elles ont des index numériques et une longueur).
176176

177+
<<<<<<< HEAD
177178
Mais un itérable peut ne pas ressembler à un tableau. Et inversement, un tableau peut ne pas être itérable.
179+
=======
180+
But an iterable may be not array-like. And vice versa an array-like may be not iterable.
181+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
178182
179183
Par exemple, la `range` dans l'exemple ci-dessus est itérable, mais pas comme un array-like (comme-un-tableau), car elle n'a pas de propriétés indexées et de `length`.
180184

1-js/05-data-types/10-destructuring-assignment/article.md

Lines changed: 116 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,38 @@
22

33
Les deux structures de données les plus utilisées en JavaScript sont `Object` et `Array`.
44

5+
<<<<<<< HEAD
56
Les objets nous permettent de créer une seule entité qui stocke les éléments de données par clé, et les tableaux nous permettent de rassembler des éléments de données dans une collection ordonnée.
67

78
Mais lorsque nous transmettons ceux-ci à une fonction, il se peut que celle-ci n'ait pas besoin d'un objet / tableau dans son ensemble, mais plutôt de morceaux individuels.
89

910
*L'affectation par décomposition* est une syntaxe spéciale qui nous permet de "décompresser" des tableaux ou des objets dans un ensemble de variables, ce qui est parfois plus pratique. La décomposition fonctionne également très bien avec des fonctions complexes comportant de nombreux paramètres, valeurs par défaut, etc.
11+
=======
12+
- Objects allow us to create a single entity that stores data items by key.
13+
- Arrays allow us to gather data items into an ordered list.
14+
15+
Although, when we pass those to a function, it may need not an object/array as a whole. It may need individual pieces.
16+
17+
*Destructuring assignment* is a special syntax that allows us to "unpack" arrays or objects into a bunch of variables, as sometimes that's more convenient.
18+
19+
Destructuring also works great with complex functions that have a lot of parameters, default values, and so on. Soon we'll see that.
20+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
1021
1122
## Décomposition d'un tableau
1223

24+
<<<<<<< HEAD
1325
Un exemple de la façon dont un tableau est décomposé en variables :
1426

1527
```js
1628
// nous avons un tableau avec le nom et le prénom
1729
let arr = ["Ilya", "Kantor"]
30+
=======
31+
Here's an example of how an array is destructured into variables:
32+
33+
```js
34+
// we have an array with the name and surname
35+
let arr = ["John", "Smith"]
36+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
1837
1938
*!*
2039
// l'affectation par décomposition
@@ -23,20 +42,29 @@ let arr = ["Ilya", "Kantor"]
2342
let [firstName, surname] = arr;
2443
*/!*
2544

26-
alert(firstName); // Ilya
27-
alert(surname); // Kantor
45+
alert(firstName); // John
46+
alert(surname); // Smith
2847
```
2948

3049
Maintenant, nous pouvons travailler avec des variables plutôt que des parties du tableau.
3150

3251
Cela a l'air pas mal quand c'est combiné avec `split` ou tout autre méthode de renvoi de tableau :
3352

34-
```js
35-
let [firstName, surname] = "Ilya Kantor".split(' ');
53+
```js run
54+
let [firstName, surname] = "John Smith".split(' ');
55+
alert(firstName); // John
56+
alert(surname); // Smith
3657
```
3758

59+
<<<<<<< HEAD
3860
````smart header="\"Décomposition\" ne veut pas dire \"destruction\"."
3961
Cette manipulation est appelée "affectation par décomposition"", car elle "se décompose"" en copiant ses éléments dans des variables. Mais le tableau lui-même n'est pas modifié.
62+
=======
63+
As you can see, the syntax is simple. There are several peculiar details though. Let's see more examples, to better understand it.
64+
65+
````smart header="\"Destructuring\" does not mean \"destructive\"."
66+
It's called "destructuring assignment," because it "destructurizes" by copying items into variables. But the array itself is not modified.
67+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
4068
4169
C’est juste une façon plus courte d’écrire :
4270
```js
@@ -69,27 +97,38 @@ Dans le code ci-dessus, le deuxième élément du tableau est ignoré, le troisi
6997
let [a, b, c] = "abc"; // ["a", "b", "c"]
7098
let [one, two, three] = new Set([1, 2, 3]);
7199
```
72-
100+
That works, because internally a destructuring assignment works by iterating over the right value. It's kind of syntax sugar for calling `for..of` over the value to the right of `=` and assigning the values.
73101
````
74102

75103

104+
<<<<<<< HEAD
76105
````smart header="Attribuer à n'importe quoi à gauche"
77106
78107
Nous pouvons utiliser n'importe quel "assignable" à gauche.
108+
=======
109+
````smart header="Assign to anything at the left-side"
110+
We can use any "assignables" at the left side.
111+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
79112
80113
Par exemple, une propriété d'objet :
81114
```js run
82115
let user = {};
83-
[user.name, user.surname] = "Ilya Kantor".split(' ');
116+
[user.name, user.surname] = "John Smith".split(' ');
84117
85-
alert(user.name); // Ilya
118+
alert(user.name); // John
119+
alert(user.surname); // Smith
86120
```
87121
88122
````
89123

124+
<<<<<<< HEAD
90125
````smart header="Boucler avec .entries()"
91126
92127
Dans le chapitre précédent, nous avons vu les méthodes [Object.entries(obj)](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/entries).
128+
=======
129+
````smart header="Looping with .entries()"
130+
In the previous chapter we saw the [Object.entries(obj)](mdn:js/Object/entries) method.
131+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
93132
94133
Nous pouvons l'utiliser avec la décomposition pour boucler sur les clés et valeurs d'un objet :
95134
@@ -107,62 +146,111 @@ for (let [key, value] of Object.entries(user)) {
107146
}
108147
```
109148
149+
<<<<<<< HEAD
110150
...Et la même chose pour un map :
151+
=======
152+
The similar code for a `Map` is simpler, as it's iterable:
153+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
111154
112155
```js run
113156
let user = new Map();
114157
user.set("name", "John");
115158
user.set("age", "30");
116159
117160
*!*
161+
// Map iterates as [key, value] pairs, very convenient for destructuring
118162
for (let [key, value] of user) {
119163
*/!*
120164
alert(`${key}:${value}`); // name:John, ensuite age:30
121165
}
122166
```
123167
````
124168

169+
<<<<<<< HEAD
125170
```smart header="Astuce d'échange de variables"
126171
Une astuce bien connue pour permuter les valeurs de deux variables :
172+
=======
173+
````smart header="Swap variables trick"
174+
There's a well-known trick for swapping values of two variables using a destructuring assignment:
175+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
127176
128177
```js run
129178
let guest = "Jane";
130179
let admin = "Pete";
131180
181+
<<<<<<< HEAD
132182
// Permuter les valeurs : faire guest=Pete, admin=Jane
183+
=======
184+
// Let's swap the values: make guest=Pete, admin=Jane
185+
*!*
186+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
133187
[guest, admin] = [admin, guest];
188+
*/!*
134189
135190
alert(`${guest} ${admin}`); // Pete Jane (échangé avec succès !)
136191
```
137192

138193
Ici, nous créons un tableau temporaire de deux variables et le déstructurons immédiatement dans l'ordre permuté.
139194

195+
<<<<<<< HEAD
140196
Nous pouvons échanger plus de deux variables de cette façon.
141197

198+
=======
199+
We can swap more than two variables this way.
200+
````
201+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
142202
143203
### Le rest '...'
144204
205+
<<<<<<< HEAD
145206
Si nous voulons non seulement obtenir les premières valeurs, mais aussi rassembler tout ce qui suit, nous pouvons ajouter un paramètre supplémentaire qui obtient "le reste" à l'aide de trois points `"..."`:
207+
=======
208+
Usually, if the array is longer when the list at the left, the "extra" items are omitted.
209+
210+
For example, here only two items are taken, and the rest is just ignored:
211+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
146212
147213
```js run
148-
let [name1, name2, *!*...rest*/!*] = ["Julius", "Caesar", *!*"Consul", "of the Roman Republic"*/!*];
214+
let [name1, name2] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
149215
150216
alert(name1); // Julius
151217
alert(name2); // Caesar
218+
// Furher items aren't assigned anywhere
219+
```
220+
221+
If we'd like also to gather all that follows -- we can add one more parameter that gets "the rest" using three dots `"..."`:
222+
223+
```js run
224+
let [name1, name2, *!*...rest*/!*] = ["Julius", "Caesar", *!*"Consul", "of the Roman Republic"*/!*];
152225
153226
*!*
154-
// Note that type of `rest` is Array.
227+
// rest is array of items, starting from the 3rd one
155228
alert(rest[0]); // Consul
156229
alert(rest[1]); // of the Roman Republic
157230
alert(rest.length); // 2
158231
*/!*
159232
```
160233
234+
<<<<<<< HEAD
161235
La valeur de `rest` est le tableau des éléments du tableau restants. Nous pouvons utiliser n’importe quel autre nom de variable à la place de `rest`, assurez-vous simplement qu’il a trois points devant lui et soit placé en dernier dans l’affectation par décomposition.
236+
=======
237+
The value of `rest` is the array of the remaining array elements.
238+
239+
We can use any other variable name in place of `rest`, just make sure it has three dots before it and goes last in the destructuring assignment.
240+
241+
```js run
242+
let [name1, name2, *!*...titles*/!*] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];
243+
// now titles = ["Consul", "of the Roman Republic"]
244+
```
245+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
162246
163247
### Les valeurs par défaut
164248
249+
<<<<<<< HEAD
165250
S'il y a moins de valeurs dans le tableau que de variables dans l'affectation, il n'y aura pas d'erreur. Les valeurs absentes sont considérées comme non définies :
251+
=======
252+
If the array is shorter than the list of variables at the left, there'll be no errors. Absent values are considered undefined:
253+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
166254
167255
```js run
168256
*!*
@@ -187,7 +275,11 @@ alert(surname); // Anonymous (default used)
187275
188276
Les valeurs par défaut peuvent être des expressions plus complexes ou même des appels de fonction. Ils ne sont évalués que si la valeur n'est pas fournie.
189277
278+
<<<<<<< HEAD
190279
Par exemple, nous utilisons ici la fonction `prompt` pour deux valeurs par défaut. Mais cela ne fonctionnera que pour celle qui manque :
280+
=======
281+
For instance, here we use the `prompt` function for two defaults:
282+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
191283
192284
```js run
193285
// runs only prompt for surname
@@ -197,7 +289,7 @@ alert(name); // Julius (from array)
197289
alert(surname); // whatever prompt gets
198290
```
199291
200-
292+
Please note: the `prompt` will run only for the missing value (`surname`).
201293
202294
## Décomposition d'object
203295
@@ -209,7 +301,11 @@ La syntaxe de base est la suivante :
209301
let {var1, var2} = {var1:…, var2:…}
210302
```
211303
304+
<<<<<<< HEAD
212305
Nous avons un objet existant à droite que nous souhaitons scinder en variables. Le côté gauche contient un "pattern" pour les propriétés correspondantes. Dans ce cas simple, c’est une liste de noms de variables dans `{...}`.
306+
=======
307+
We should have an existing object at the right side, that we want to split into variables. The left side contains an object-like "pattern" for corresponding properties. In the simplest case, that's a list of variable names in `{...}`.
308+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
213309
214310
Par exemple :
215311
@@ -229,7 +325,13 @@ alert(width); // 100
229325
alert(height); // 200
230326
```
231327
328+
<<<<<<< HEAD
232329
Les propriétés `options.title`, `options.width` et `options.height` sont affectés aux variables correspondantes. L'ordre n'a pas d'importance. Cela fonctionne aussi :
330+
=======
331+
Properties `options.title`, `options.width` and `options.height` are assigned to the corresponding variables.
332+
333+
The order does not matter. This works too:
334+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
233335
234336
```js
235337
// changé l'ordre dans let {...}
@@ -238,7 +340,11 @@ let {height, width, title} = { title: "Menu", height: 200, width: 100 }
238340
239341
Le pattern à gauche peut être plus complexe et spécifier le mapping entre propriétés et variables.
240342
343+
<<<<<<< HEAD
241344
Si nous voulons affecter une propriété à une variable portant un autre nom, par exemple, `options.width` pour aller dans la variable nommée `w`, alors nous pouvons la définir en utilisant deux points :
345+
=======
346+
If we want to assign a property to a variable with another name, for instance, make `options.width` go into the variable named `w`, then we can set the variable name using a colon:
347+
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
242348
243349
```js run
244350
let options = {

0 commit comments

Comments
 (0)