Skip to content

Commit 9fafbad

Browse files
authored
Merge pull request #412 from javascript-tutorial/sync-bf7d8bb1
Sync with upstream @ bf7d8bb
2 parents 0b3ee33 + a4b083f commit 9fafbad

File tree

158 files changed

+2667
-129
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+2667
-129
lines changed

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,15 @@ Les termes ci-dessus sont bons à retenir, car ils sont utilisés dans les artic
3636
3737
Les moteurs sont compliqués. Mais le fonctionnement de base est facile à comprendre.
3838
39+
<<<<<<< HEAD
3940
1. Le moteur (intégré si c’est un navigateur) lit ("analyse") le script.
4041
2. Ensuite, il convertit ("compile") le script en langage machine.
4142
3. Enfin le code machine s'exécute, très rapidement.
43+
=======
44+
1. The engine (embedded if it's a browser) reads ("parses") the script.
45+
2. Then it converts ("compiles") the script to machine code.
46+
3. And then the machine code runs, pretty fast.
47+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
4248
4349
Le moteur applique des optimisations à chaque étape du processus. Il surveille même le script compilé en cours d'exécution, analyse les données qui le traversent et applique des optimisations au code machine en fonction de ces informations.
4450
```
@@ -47,7 +53,11 @@ Le moteur applique des optimisations à chaque étape du processus. Il surveille
4753

4854
Le JavaScript moderne est un langage de programmation "sûr". Il ne fournit pas d'accès de bas niveau à la mémoire ou au processeur, parce qu'il a été initialement conçu pour les navigateurs qui n'en ont pas besoin.
4955

56+
<<<<<<< HEAD
5057
Les fonctionnalités dépendent grandement de l'environnement qui exécute JavaScript. Par exemple, [Node.js](https://fr.wikipedia.org/wiki/Node.js) prend en charge les fonctions qui permettent à JavaScript de lire / écrire des fichiers arbitrairement, d'exécuter des requêtes réseau, etc.
58+
=======
59+
Modern JavaScript is a "safe" programming language. It does not provide low-level access to memory or the CPU, because it was initially created for browsers which do not require it.
60+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
5161
5262
JavaScript intégré au navigateur peut faire tout ce qui concerne la manipulation des pages Web, l'interaction avec l'utilisateur et le serveur Web.
5363

@@ -63,14 +73,19 @@ Par exemple, JavaScript dans le navigateur est capable de :
6373

6474
Les capacités de JavaScript dans le navigateur sont limitées pour la sécurité de l'utilisateur. L'objectif est d'empêcher une page Web malveillante d'accéder à des informations privées ou de nuire aux données de l'utilisateur.
6575

76+
<<<<<<< HEAD
6677
Les exemples de telles restrictions sont:
78+
=======
79+
JavaScript's abilities in the browser are limited to protect the user's safety. The aim is to prevent an evil webpage from accessing private information or harming the user's data.
80+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
6781
6882
- JavaScript sur une page Web ne peut pas lire/écrire des fichiers arbitrairement sur le disque dur, les copier ou exécuter des programmes. Il n'a pas d'accès direct aux fonctions du système d'exploitation.
6983

7084
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>`.
7185

7286
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).
7387

88+
<<<<<<< HEAD
7489
- 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).
7590

7691
C'est ce qu'on appelle la "politique de même origine" (“Same Origin Policy”). Pour contourner cette sécurité, _les deux pages_ doivent se mettre d'accord et contenir un code JavaScript spécial qui gère l'échange de données. Nous allons voir cela plus loin dans ce tutoriel.
@@ -82,6 +97,19 @@ Les exemples de telles restrictions sont:
8297
![](limitations.svg)
8398

8499
De telles limites n'existent pas si JavaScript est utilisé en dehors du navigateur, par exemple sur un serveur. Les navigateurs modernes permettent également l’installation de plug-ins / extensions susceptibles d’obtenir des autorisations étendues.
100+
=======
101+
There are ways to interact with the 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).
102+
- 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 page if they come from different sites (from a different domain, protocol or port).
103+
104+
This is called the "Same Origin Policy". To work around that, *both pages* must agree for data exchange and must contain special JavaScript code that handles it. We'll cover that in the tutorial.
105+
106+
This limitation is, again, for the user's safety. A page from `http://anysite.com` which a user has opened must not be able to access another browser tab with the URL `http://gmail.com`, for example, and steal information from there.
107+
- JavaScript can easily communicate over the net to the server where the current page came from. But its ability to receive data from other sites/domains is crippled. Though possible, it requires explicit agreement (expressed in HTTP headers) from the remote side. Once again, that's a safety limitation.
108+
109+
![](limitations.svg)
110+
111+
Such limitations do not exist if JavaScript is used outside of the browser, for example on a server. Modern browsers also allow plugins/extensions which may ask for extended permissions.
112+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
85113
86114
## Qu'est-ce qui rend JavaScript unique ?
87115

@@ -97,20 +125,29 @@ JavaScript est la seule technologie de navigateur qui combine ces trois élémen
97125

98126
C’est ce qui rend JavaScript unique. C’est pourquoi c’est l’outil le plus répandu pour créer des interfaces de navigateur.
99127

128+
<<<<<<< HEAD
100129
Cela dit, JavaScript permet également de créer des serveurs, des applications mobiles, etc.
130+
=======
131+
That said, JavaScript can be used to create servers, mobile applications, etc.
132+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
101133
102134
## Les langages "par dessus" JavaScript
103135

104136
La syntaxe de JavaScript ne convient pas aux besoins de tous. Différentes personnes veulent des fonctionnalités différentes.
105137

106138
Il faut s’y attendre, parce que les projets et les exigences sont différents pour tous.
107139

140+
<<<<<<< HEAD
108141
Donc, récemment, une pléthore de nouveaux langages sont apparus, qui sont _transposés_ (convertis) en JavaScript avant leur exécution dans le navigateur.
142+
=======
143+
So, recently a plethora of new languages appeared, which are *transpiled* (converted) to JavaScript before they run in the browser.
144+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
109145
110146
Les outils modernes rendent la [transpilation](https://fr.wiktionary.org/wiki/transpilation) très rapide et transparente, permettant aux développeurs de coder dans une autre langue et de la convertir automatiquement "sous le capot".
111147

112148
Les exemples de ce genre de langages :
113149

150+
<<<<<<< HEAD
114151
- [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.
115152
- [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.
116153
- [Flow](http://flow.org/) ajoute également la saisie de données, mais de manière différente. Développé par Facebook.
@@ -119,6 +156,16 @@ Les exemples de ce genre de langages :
119156
- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) est un langage de programmation moderne, concis et sûr qui peut cibler le navigateur ou Node.
120157

121158
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.
159+
=======
160+
- [CoffeeScript](https://coffeescript.org/) is "syntactic sugar" for JavaScript. It introduces shorter syntax, allowing us to write clearer and more precise code. Usually, Ruby devs like it.
161+
- [TypeScript](https://www.typescriptlang.org/) is concentrated on adding "strict data typing" to simplify the development and support of complex systems. It is developed by Microsoft.
162+
- [Flow](https://flow.org/) also adds data typing, but in a different way. Developed by Facebook.
163+
- [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.
164+
- [Brython](https://brython.info/) is a Python transpiler to JavaScript that enables the writing of applications in pure Python without JavaScript.
165+
- [Kotlin](https://kotlinlang.org/docs/reference/js-overview.html) is a modern, concise and safe programming language that can target the browser or Node.
166+
167+
There are more. Of course, even if we use one of these transpiled languages, we should also know JavaScript to really understand what we're doing.
168+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
122169
123170
## Résumé
124171

1-js/01-getting-started/2-manuals-specifications/article.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11

22
# Manuels et spécifications
33

4+
<<<<<<< HEAD
45
Ce livre est un *tutoriel*. Il vise à vous aider à apprendre progressivement le langage. Mais une fois que vous maîtriserez les bases, vous aurez besoin d’autres ressources.
6+
=======
7+
This book is a *tutorial*. It aims to help you gradually learn the language. But once you're familiar with the basics, you'll need other resources.
8+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
59
610
<iframe width="560" height="315" src="https://www.youtube.com/embed/TqQs_MKMqwU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
711

812
## Spécification
913

1014
[The ECMA-262 specification](https://www.ecma-international.org/publications/standards/Ecma-262.htm) contient les informations les plus détaillées et formalisées sur JavaScript. C'est elle qui définit le langage.
1115

16+
<<<<<<< HEAD
1217
Une nouvelle version de la spécification est publiée chaque année. La dernière version en cours est disponible à cette adresse : <https://tc39.es/ecma262/>.
18+
=======
19+
A new specification version is released every year. Between these releases, the latest specification draft is at <https://tc39.es/ecma262/>.
20+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
1321
1422
Pour en savoir plus sur les fonctionnalités à venir, y compris celles qui sont "presque standards" (appelées aussi "stage 3"), vous pouvez consulter les propositions à cette adresse : <https://github.com/tc39/proposals>.
1523

@@ -19,19 +27,32 @@ De plus, si vous développez pour le navigateur, d'autres spécifications sont c
1927

2028
- **La référence MDN (Mozilla) JavaScript** est le principal manuel avec des exemples et d’autres informations. C’est une excellente source pour obtenir des informations détaillées sur les fonctions linguistiques, les méthodes, etc.
2129

30+
<<<<<<< HEAD
2231
On peut la trouver à cette adresse : <https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference>.
2332

2433
Cependant, il est souvent préférable d’utiliser une recherche sur Internet. Utilisez simplement "MDN [terme]" dans la requête, par exemple <https://google.com/search?q=MDN+parseInt> pour rechercher la fonction `parseInt`.
34+
=======
35+
You can find it at <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference>.
36+
37+
Although, it's often best to use an internet search instead. Just use "MDN [term]" in the query, e.g. <https://google.com/search?q=MDN+parseInt> to search for the `parseInt` function.
38+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
2539
2640

2741
## Tableaux de compatibilité
2842

2943
JavaScript est un langage en développement, de nouvelles fonctionnalités sont ajoutées régulièrement.
3044

45+
<<<<<<< HEAD
3146
Pour voir si elles sont supportées dans les moteurs, au sein des navigateurs et autres, voir :
3247

3348
- <http://caniuse.com> - tables de prise en charge par fonctionnalité, par exemple pour voir quels moteurs supportent les fonctions de cryptographie modernes : <http://caniuse.com/#feat=cryptography>.
3449
- <https://kangax.github.io/compat-table> - un tableau avec les fonctionnalités linguistiques et les moteurs qui les prennent en charge ou non.
50+
=======
51+
- <https://caniuse.com> - per-feature tables of support, e.g. to see which engines support modern cryptography functions: <https://caniuse.com/#feat=cryptography>.
52+
- <https://kangax.github.io/compat-table> - a table with language features and engines that support those or don't support.
53+
54+
All these resources are useful in real-life development, as they contain valuable information about language details, their support, etc.
55+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
3556
3657
Toutes ces ressources sont utiles dans le quotidien des développeurs, parce qu'elles contiennent des informations précieuses sur les fonctionnalités du langage, leur support, etc.
3758

1-js/01-getting-started/3-code-editors/article.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@ Un IDE charge le projet (peut contenir de nombreux fichiers), permet la navigati
1515
Si vous n'avez pas encore pensé à sélectionner un IDE, examinez les variantes suivantes :
1616

1717
- [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free).
18+
<<<<<<< HEAD
1819
- [WebStorm](http://www.jetbrains.com/webstorm/) pour le développement frontend et autres éditeurs de la même société si vous avez besoin de langues supplémentaires.
1920

2021
Pour Windows, il existe également "Visual Studio", à ne pas confondre avec "Visual Studio Code ". "Visual Studio" est un éditeur payant et puissant, uniquement conçu pour Windows, bien adapté à la plate-forme .NET. C’est aussi bon en JavaScript. Il y a aussi une version gratuite [Visual Studio Community](https://www.visualstudio.com/vs/community/).
22+
=======
23+
- [WebStorm](https://www.jetbrains.com/webstorm/) (cross-platform, paid).
24+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
2125
2226
La plupart des IDE sont payants, mais ont une période d'essai. Leur coût est généralement négligeable par rapport au salaire d’un développeur qualifié, alors choisissez le meilleur pour vous.
2327

@@ -38,6 +42,12 @@ Les options suivantes méritent votre attention :
3842
- [Notepad++](https://notepad-plus-plus.org/) (Windows, gratuit).
3943
- [Vim](http://www.vim.org/) et [Emacs](https://www.gnu.org/software/emacs/) sont également cool, si vous savez comment les utiliser.
4044

45+
<<<<<<< HEAD
46+
=======
47+
- [Sublime Text](http://www.sublimetext.com) (cross-platform, shareware).
48+
- [Notepad++](https://notepad-plus-plus.org/) (Windows, free).
49+
- [Vim](http://www.vim.org/) and [Emacs](https://www.gnu.org/software/emacs/) are also cool if you know how to use them.
50+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
4151
4252
## Ne discutons pas
4353

1-js/02-first-steps/04-variables/3-uppercast-constant/task.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,24 @@ const birthday = '18.04.1982';
1212
const age = someCode(birthday);
1313
```
1414

15+
<<<<<<< HEAD
1516
Ici nous avons une constante date `birthday` et l'`age` est calculé à partir de `birthday` avec l'aide d'un code (il n'est pas prévu pour être court, et parce que les détails n'ont pas d'importance ici).
17+
=======
18+
Here we have a constant `birthday` for the date, and also the `age` constant.
19+
20+
The `age` is calculated from `birthday` using `someCode()`, which means a function call that we didn't explain yet (we will soon!), but the details don't matter here, the point is that `age` is calculated somehow based on the `birthday`.
21+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
1622
1723
Serait-il juste d'utiliser des majuscules pour `birthday`? Pour `age`? Ou même pour les deux ?
1824

1925
```js
26+
<<<<<<< HEAD
2027
const BIRTHDAY = '18.04.1982'; // créer en majuscule ?
2128

2229
const AGE = someCode(BIRTHDAY); // créer en majuscule ?
23-
```
30+
=======
31+
const BIRTHDAY = '18.04.1982'; // make birthday uppercase?
2432

33+
const AGE = someCode(BIRTHDAY); // make age uppercase?
34+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
35+
```

1-js/02-first-steps/04-variables/article.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,12 @@ let age = 25;
6363
let message = 'Hello';
6464
```
6565

66+
<<<<<<< HEAD
6667
Certaines personnes écrivent également de nombreuses variables comme celle-ci :
68+
=======
69+
Some people also define multiple variables in this multiline style:
70+
71+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
6772
```js no-beautify
6873
let user = 'John',
6974
age = 25,
@@ -104,6 +109,11 @@ Nous pouvons mettre n'importe quelle valeur dans la boîte.
104109
105110
Nous pouvons aussi la changer. La valeur peut être modifiée autant de fois que nécessaire :
106111
112+
<<<<<<< HEAD
113+
=======
114+
We can also change it as many times as we want:
115+
116+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
107117
```js run
108118
let message;
109119
@@ -192,8 +202,13 @@ let 1a; // ne peut pas commencer avec un chiffre
192202
let mon-nom; // un trait d'union '-' n'est pas autorisé dans le nom
193203
```
194204

205+
<<<<<<< HEAD
195206
```smart header="La casse est importante"
196207
Des variables nommées `pomme` and `PomMe` -- sont deux variables différentes.
208+
=======
209+
```smart header="Case matters"
210+
Variables named `apple` and `APPLE` are two different variables.
211+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
197212
```
198213

199214
````smart header="Les lettres non latines sont autorisées mais non recommandées"
@@ -263,8 +278,12 @@ myBirthday = '01.01.2001'; // erreur, ne peut pas réaffecter la constante !
263278
264279
Lorsqu'un programmeur est certain que la variable ne doit jamais changer, il peut utiliser `const` pour le garantir et également le montrer clairement à tout le monde.
265280
281+
<<<<<<< HEAD
266282
267283
### Les constantes en majuscules
284+
=======
285+
### Uppercase constants
286+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
268287
269288
Il existe une pratique répandue d’utiliser des constantes comme alias pour des valeurs difficiles à mémoriser, qui sont connues avant leur exécution.
270289
@@ -293,14 +312,23 @@ Quand devrions-nous utiliser les majuscules pour une constante et quand devrions
293312
294313
Être une "constante" signifie simplement que la valeur ne change jamais. Mais il existe des constantes connues avant l'exécution (comme une valeur hexadécimale pour le rouge), et il y a celles qui sont *calculées* en temps réel, pendant l'exécution, mais ne changent pas après l'affectation.
295314
315+
<<<<<<< HEAD
296316
Par exemple :
317+
=======
318+
For instance:
319+
320+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
297321
```js
298322
const pageLoadTime = /* temps pris par une page Web pour charger */;
299323
```
300324
301325
La valeur de `pageLoadTime` n’est pas connue avant le chargement de la page, elle est donc nommée normalement. Mais cela reste une constante, car elle ne change pas après l’affectation.
302326
327+
<<<<<<< HEAD
303328
En d'autres termes, les constantes nommées en majuscules ne sont utilisées que comme alias pour les valeurs "codées en dur".
329+
=======
330+
In other words, capital-named constants are only used as aliases for "hard-coded" values.
331+
>>>>>>> bf7d8bb1af3b416d393af1c15b03cb1352da1f9c
304332
305333
## Nommez les choses correctement
306334

0 commit comments

Comments
 (0)