Skip to content

Commit b852d98

Browse files
authored
Merge pull request #207 from raphaelchalicarne/master
Unicode: flag "u" and class \p{...}
2 parents 95a67ee + 7e8542f commit b852d98

File tree

4 files changed

+252
-177
lines changed

4 files changed

+252
-177
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
La raison en est que l'invite renvoie l'entrée utilisateur sous forme de chaîne.
2+
3+
Les variables ont donc respectivement les valeurs `"1"` et `"2"`.
4+
5+
```js run
6+
let a = "1"; // prompt("First number?", 1);
7+
let b = "2"; // prompt("Second number?", 2);
8+
9+
alert(a + b); // 12
10+
```
11+
12+
Ce que nous devons faire est de convertir les chaînes en nombres avant `+`. Par exemple, en utilisant `Number ()` ou en les ajoutant au début avec `+`.
13+
14+
Par exemple, juste avant `prompt`:
15+
16+
```js run
17+
let a = +prompt("First number?", 1);
18+
let b = +prompt("Second number?", 2);
19+
20+
alert(a + b); // 3
21+
```
22+
23+
Ou dans l'`alert`:
24+
25+
```js run
26+
let a = prompt("First number?", 1);
27+
let b = prompt("Second number?", 2);
28+
29+
alert(+a + +b); // 3
30+
```
31+
32+
Nous utilisons à la fois unaire et binaire `+` dans le dernier code. Ça a l'air drôle, non?
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
importance: 5
2+
3+
---
4+
5+
# Corrigez l'addition
6+
7+
Voici un code qui demande à l'utilisateur deux nombres et montre leur somme.
8+
9+
Cela ne fonctionne pas correctement. La sortie dans l'exemple ci-dessous est `12` (pour les valeurs d'invite par défaut).
10+
11+
Pourquoi ? Réparez-le. Le résultat doit être `3`.
12+
13+
```js run
14+
let a = prompt("First number?", 1);
15+
let b = prompt("Second number?", 2);
16+
17+
alert(a + b); // 12
18+
```

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

Lines changed: 109 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Opérateurs
22

3-
De nombreux opérateurs nous sont connus de l'école. Ce sont les additions `+`, multiplications `*`, soustractions `-` et ainsi de suite.
3+
De nombreux opérateurs nous sont connus de l'école. Ce sont les additions `+`, multiplications `*`, soustractions `-` et ainsi de suite.
44

55
Dans ce chapitre, nous nous concentrons sur les aspects qui ne sont pas couverts par l'arithmétique scolaire.
66

@@ -19,7 +19,7 @@ Avant de continuer, saisissons la terminologie commune.
1919
*/!*
2020
alert( x ); // -1, le moins unaire a été appliqué
2121
```
22-
- Un opérateur est `binaire` s'il a deux opérandes. La même négation existe également dans la forme binaire :
22+
- Un opérateur est *binaire* s'il a deux opérandes. La même négation existe également dans la forme binaire :
2323
2424
```js run no-beautify
2525
let x = 1, y = 3;
@@ -28,6 +28,52 @@ Avant de continuer, saisissons la terminologie commune.
2828
2929
D'un point de vue formel, dans les exemples ci-dessus, nous avons deux opérateurs différents qui partagent le même symbole : l'opérateur de négation, un opérateur unaire qui inverse le signe, et l'opérateur de soustraction, un opérateur binaire qui soustrait un nombre d'un autre.
3030
31+
## Opérations mathématiques
32+
33+
Les opérations mathématiques suivantes sont supportées :
34+
35+
- Addition `+`,
36+
- Soustraction `-`,
37+
- Multiplication `*`,
38+
- Division `/`,
39+
- Reste `%`,
40+
- Exponentiation `**`.
41+
42+
Les quatre premières sont assez simples, tandis que `%` et `**` nécéssitent quelques explications.
43+
44+
### Reste % (Modulo)
45+
46+
L'opérateur reste `%`, malgré son apparence, n'est pas lié aux pourcentages.
47+
48+
Le résultat de `a % b` est le [reste](https://fr.wikipedia.org/wiki/Reste) de la division entière de `a` par `b`.
49+
50+
Par exemple:
51+
52+
```js run
53+
alert( 5 % 2 ); // 1, le reste de 5 divisé par 2
54+
alert( 8 % 3 ); // 2, le reste de 8 divisé par 3
55+
```
56+
57+
### Exponentiation **
58+
59+
L'opérateur d'exponentiation `a ** b` multiplie `a` par lui-même `b` fois.
60+
61+
Par exemple:
62+
63+
```js run
64+
alert( 2 ** 2 ); // 4 (2 multiplié par lui-même 2 fois)
65+
alert( 2 ** 3 ); // 8 (2 * 2 * 2, 3 fois)
66+
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2, 4 fois)
67+
```
68+
69+
Mathématiquement, l'exponentiation est également définie pour les nombres non entiers. Par exemple, une racine carrée est une exponentiation de `1/2`:
70+
71+
```js run
72+
alert( 4 ** (1/2) ); // 2 (la puissance de 1/2 équivaut à une racine carrée)
73+
alert( 8 ** (1/3) ); // 2 (la puissance de 1/3 équivaut à une racine cubique)
74+
```
75+
76+
3177
## Concaténation de chaînes de caractères, binaire `+`
3278

3379
Voyons maintenant les caractéristiques spéciales des opérateurs JavaScript qui sont au-delà de l’arithmétique scolaire.
@@ -56,23 +102,24 @@ Cependant, notez que les opérations se déroulent de gauche à droite. S'il y a
56102

57103

58104
```js run
59-
alert(2 + 2 + '1' ); // "41" and not "221"
105+
alert(2 + 2 + '1' ); // "41" et non "221"
60106
```
61107

62-
La concaténation et la conversion en chaînes de caractères sont une caractéristique particulière du binaire plus `+`. Les autres opérateurs arithmétiques ne travaillent qu'avec des nombres. Ils convertissent toujours leurs opérandes en nombres.
108+
Ici, les opérateurs travaillent les uns après les autres. Le premier `+` additionne deux nombres, donc il renvoie `4`, puis le `+` suivant ajoute la chaîne `1`, donc c'est comme `4 + '1' = 41`.
63109
64-
Par exemple, soustraction et division :
110+
Le binaire `+` est le seul opérateur qui prend en charge les chaînes de cette manière. D'autres opérateurs arithmétiques ne fonctionnent qu'avec des nombres et convertissent toujours leurs opérandes en nombres.
65111
112+
Voici l'exemple pour la soustraction et la division:
66113
```js run
67-
alert( 2 - '1' ); // 1
68-
alert( '6' / '2' ); // 3
114+
alert( 6 - '2' ); // 4, convertit '2' en nombre
115+
alert( '6' / '2' ); // 3, convertit les deux opérandes en nombres
69116
```
70117

71118
## Conversion numérique, unaire +
72119

73120
Le plus `+` existe sous deux formes. La forme binaire que nous avons utilisée ci-dessus et la forme unaire.
74121

75-
L’unaire plus ou, en d’autres termes, l’opérateur plus `+` appliqué à une seule valeur, ne fait rien avec les nombres, mais si l’opérande n’est pas un nombre, alors il est converti en nombre.
122+
L’unaire plus ou, en d’autres termes, l’opérateur plus `+` appliqué à une seule valeur, ne fait rien avec les nombres, mais si l’opérande n’est pas un nombre, alors il est convertit en nombre.
76123

77124
Par exemple :
78125

@@ -95,7 +142,6 @@ En fait, il fait la même chose que `Number(...)`, mais il est plus court.
95142

96143
La nécessité de convertir des chaînes de caractères en nombres est très fréquente. Par exemple, si nous obtenons des valeurs à partir de champs de formulaire HTML, il s’agit généralement de chaînes de caractères. Et si on veut les additionner ?
97144

98-
99145
Le binaire plus les ajouterait comme des chaînes de caractères :
100146

101147
```js run
@@ -141,6 +187,7 @@ Un extrait du [tableau de précédence](https://developer.mozilla.org/fr/docs/We
141187
| ... | ... | ... |
142188
| 17 | plus unaire | `+` |
143189
| 17 | négation unaire | `-` |
190+
| 16 | exponentiation | `**` |
144191
| 15 | multiplication | `*` |
145192
| 15 | division | `/` |
146193
| 13 | addition | `+` |
@@ -163,28 +210,15 @@ let x = 2 * 2 + 1;
163210
alert( x ); // 5
164211
```
165212

166-
Il est possible de chaîner des affectations :
167-
168-
```js run
169-
let a, b, c;
170-
171-
*!*
172-
a = b = c = 2 + 2;
173-
*/!*
174-
175-
alert( a ); // 4
176-
alert( b ); // 4
177-
alert( c ); // 4
178-
```
213+
### Assignment = retourne une valeur
179214

180-
Les affectations en chaîne sont évaluées de droite à gauche. D'abord, l'expression la plus à droite `2 + 2` est évaluée puis assignée aux variables de gauche: `c`, `b` et `a`. À la fin, toutes les variables partagent une seule valeur.
215+
Le fait que `=` soit un opérateur, pas une construction de langage "magique" a une implication intéressante.
181216

182-
````smart header="L'opérateur d'affectation `\"=\"` renvoie une valeur"
183-
Un opérateur retourne toujours une valeur. C’est évident pour la plupart d’entre eux, comme une addition `+` ou une multiplication `*`. Mais l'opérateur d'affectation suit également cette règle.
217+
La plupart des opérateurs en JavaScript renvoient une valeur. C'est évident pour `+` et `-`, mais aussi vrai pour `=`.
184218

185-
L'appel `x = valeur` écrit la valeur dans `x` puis `la retourne`.
219+
L'appel `x = valeur` écrit la` valeur` dans `x` *puis la renvoie*.
186220

187-
Voici un exemple qui utilise une affectation dans le cadre d'une expression plus complexe :
221+
Voici un exemple qui utilise une affectation dans le cadre d'une expression plus complexe:
188222

189223
```js run
190224
let a = 1;
@@ -198,46 +232,71 @@ alert( a ); // 3
198232
alert( c ); // 0
199233
```
200234

201-
Dans l'exemple ci-dessus, le résultat de `(a = b + 1)` est la valeur attribuée à `a` (c'est-à-dire `3`). Il est ensuite utilisé pour d'autres évaluations.
202-
203-
Code drôle, n'est-ce pas ? Nous devrions comprendre comment cela fonctionne, car parfois nous pouvons le voir dans des bibliothèques tierces, mais nous ne devrions pas écrire quoi que ce soit de similaire nous-mêmes. De telles astuces ne permettent pas de rendre le code plus clair et lisible.
204-
````
235+
Dans l'exemple ci-dessus, le résultat de l'expression`(a = b + 1)` est la valeur qui a été affectée à `a` (c'est-à-dire `3`). Il est ensuite utilisé pour d'autres évaluations.
205236

206-
## Reste % (Modulo)
237+
Drôle de code, n'est-ce pas? Nous devons comprendre comment cela fonctionne, car parfois nous le voyons dans les bibliothèques JavaScript.
207238

208-
L'opérateur reste `%` malgré son apparence n'a pas de relation avec les pourcentages.
239+
Cependant, n'écrivez pas le code comme ça. De telles astuces ne rendent certainement pas le code plus clair ou lisible.
209240

210-
Le résultat de `a % b` est le reste de la division entière de `a` par `b`.
241+
### Affectations chaînées
211242

212-
Par exemple :
243+
Une autre caractéristique intéressante est la possibilité de chaîner des affectations :
213244

214245
```js run
215-
alert( 5 % 2 ); // 1 est le reste de 5 divisé par 2
216-
alert( 8 % 3 ); // 2 est le reste de 8 divisé par 3
217-
alert( 6 % 3 ); // 0 est le reste de 6 divisé par 3
246+
let a, b, c;
247+
248+
*!*
249+
a = b = c = 2 + 2;
250+
*/!*
251+
252+
alert( a ); // 4
253+
alert( b ); // 4
254+
alert( c ); // 4
218255
```
219256

220-
## Exponentiation **
257+
Les affectations en chaîne sont évaluées de droite à gauche. D'abord, l'expression la plus à droite `2 + 2` est évaluée puis assignée aux variables de gauche: `c`, `b` et `a`. À la fin, toutes les variables partagent une seule valeur.
221258

222-
L'opérateur d'exponentiation `**` est un ajout récent au langage.
259+
Encore une fois, pour des raisons de lisibilité, il est préférable de diviser ce code en quelques lignes:
223260

224-
Pour un entier naturel `b`, le résultat de `a ** b` est `a` multiplié par lui-même `b`fois.
261+
```js
262+
c = 2 + 2;
263+
b = c;
264+
a = c;
265+
```
266+
C'est plus facile à lire, en particulier lors de la numérisation rapide du code.
267+
268+
## Modification sur place
269+
270+
Nous avons souvent besoin d'appliquer un opérateur à une variable et d'y stocker le nouveau résultat.
225271

226272
Par exemple :
227273

274+
```js
275+
let n = 2;
276+
n = n + 5;
277+
n = n * 2;
278+
```
279+
280+
Cette notation peut être raccourcie en utilisant les opérateurs `+=` et `*=` :
281+
228282
```js run
229-
alert( 2 ** 2 ); // 4 (2 * 2)
230-
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
231-
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
283+
let n = 2;
284+
n += 5; // maintenant n = 7 (identique à n = n + 5)
285+
n *= 2; // maintenant n = 14 (identique à n = n * 2)
286+
287+
alert( n ); // 14
232288
```
233289

234-
L'opérateur travaille également pour les nombres non entiers.
290+
Il existe de opérateurs de "modification et assignation" courts pour tous les opérateurs arithmétiques et binaires: `/=`, `-=` etc.
235291

236-
Par exemple :
292+
Ces opérateurs ont la même précédence qu'une affectation normale. Ils s'exécutent donc après la plupart des autres calculs :
237293

238294
```js run
239-
alert( 4 ** (1/2) ); // 2 (puissance de 1/2 est la même chose qu'une racine carrée, c'est des maths)
240-
alert( 8 ** (1/3) ); // 2 (la puissance de 1/3 est la même que celle d'une racine cubique)
295+
let n = 2;
296+
297+
n *= 3 + 5;
298+
299+
alert( n ); // 16 (partie droite évaluée en premier, identique à n *= 8)
241300
```
242301

243302
## Incrémentation / décrémentation
@@ -287,7 +346,7 @@ let a = ++counter; // (*)
287346
alert(a); // *!*2*/!*
288347
```
289348
290-
Ici, dans la ligne `(*)`, l'appel du préfixe `++counter` incrémente le compteur et retourne la nouvelle valeur qui est 2. Ainsi, l'alerte affiche 2.
349+
Ici, dans la ligne `(*)`, l'appel du *préfixe* `++counter` incrémente le compteur et retourne la nouvelle valeur qui est `2`. Ainsi, l'`alert` affiche `2`.
291350
292351
Maintenant, utilisons la forme postfixe :
293352
@@ -298,7 +357,7 @@ let a = counter++; // (*) changé ++counter pour counter++
298357
alert(a); // *!*1*/!*
299358
```
300359
301-
Dans la ligne `(*)`, la forme postfixe `counter++` incrémente également `counter`, mais renvoie l'**ancienne** valeur (avant l'incrémentation). Donc, l'`alert` montre 1.
360+
Dans la ligne `(*)`, la forme postfixe `counter++` incrémente également `counter`, mais renvoie l'*ancienne* valeur (avant l'incrémentation). Donc, l'`alert` montre `1`.
302361

303362
Pour résumer :
304363

@@ -371,40 +430,6 @@ La liste des opérateurs :
371430

372431
Ces opérateurs sont très rarement utilisés. Pour les comprendre, nous devrions nous intéresser à la représentation numérique de bas niveau, et il ne serait pas optimal de le faire dès maintenant. Surtout parce que nous n’en aurons pas besoin de sitôt. Si vous êtes curieux, vous pouvez lire l'article [Opérateurs binaires](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Op%C3%A9rateurs/Op%C3%A9rateurs_binaires) sur MDN. Il serait plus pratique de le faire quand un besoin réel se fait sentir.
373432
374-
## Modification sur place
375-
376-
Nous avons souvent besoin d'appliquer un opérateur à une variable et d'y stocker le nouveau résultat.
377-
378-
Par exemple :
379-
380-
```js
381-
let n = 2;
382-
n = n + 5;
383-
n = n * 2;
384-
```
385-
386-
Cette notation peut être raccourcie en utilisant les opérateurs `+=` et `*=` :
387-
388-
```js run
389-
let n = 2;
390-
n += 5; // maintenant n = 7 (identique à n = n + 5)
391-
n *= 2; // maintenant n = 14 (identique à n = n * 2)
392-
393-
alert( n ); // 14
394-
```
395-
396-
Il existe de opérateurs de "modification et assignation" courts pour tous les opérateurs arithmétiques et binaires: `/=`, `-=` etc.
397-
398-
Ces opérateurs ont la même précédence qu'une affectation normale. Ils s'exécutent donc après la plupart des autres calculs :
399-
400-
```js run
401-
let n = 2;
402-
403-
n *= 3 + 5;
404-
405-
alert( n ); // 16 (partie droite évaluée en premier, identique à n *= 8)
406-
```
407-
408433
## Virgule
409434
410435
L'opérateur virgule `,` est l'un des opérateurs les plus rares et les plus inhabituels. Parfois, il faut écrire un code plus court, il faut donc le connaître pour comprendre ce qui se passe.

0 commit comments

Comments
 (0)