diff --git a/1-js/02-first-steps/04-variables/article.md b/1-js/02-first-steps/04-variables/article.md index 351bd059c..f50c16ec1 100644 --- a/1-js/02-first-steps/04-variables/article.md +++ b/1-js/02-first-steps/04-variables/article.md @@ -150,12 +150,21 @@ let message = "That"; // SyntaxError: 'message' has already been declared Donc, nous devrions déclarer une variable une fois et y faire référence sans `let`. ```` +<<<<<<< HEAD ```smart header="Langages fonctionnels" Il peut être intéressant de savoir qu'il existe aussi des langages de [programmation fonctionelle](https://fr.wikipedia.org/wiki/Programmation_fonctionnelle), comme [Scala](https://www.scala-lang.org/) ou [Erlang](https://www.erlang.org/) qui interdisent de modifier une valeur de variable. +======= +```smart header="Functional languages" +It's interesting to note that there exist so-called [pure functional](https://en.wikipedia.org/wiki/Purely_functional_programming) programming languages, such as [Haskell](https://en.wikipedia.org/wiki/Haskell), that forbid changing variable values. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Dans ce genre de langage, une fois la valeur stockée dans la boîte, elle est là pour toujours. Si nous devons stocker autre chose, le langage nous oblige à créer une nouvelle boîte (déclarer une nouvelle variable). Nous ne pouvons pas réutiliser l’ancienne. +<<<<<<< HEAD Bien que cela puisse paraître un peu étrange à première vue, ces langages sont tout à fait capables de se développer sérieusement. Plus que cela, il existe des domaines tels que les calculs parallèles où cette limitation confère certains avantages. Étudier un tel langage (même si on ne prévoit pas de l'utiliser rapidement) est recommandé pour élargir son horizon. +======= +Though it may seem a little odd at first sight, these languages are quite capable of serious development. More than that, there are areas like parallel computations where this limitation confers certain benefits. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c ``` ## Nom de variable [#variable-naming] diff --git a/1-js/02-first-steps/05-types/article.md b/1-js/02-first-steps/05-types/article.md index 212808478..606cf2a24 100644 --- a/1-js/02-first-steps/05-types/article.md +++ b/1-js/02-first-steps/05-types/article.md @@ -226,7 +226,11 @@ Le type `symbol` est utilisé pour créer des identificateurs uniques pour les o ## L'opérateur typeof [#type-typeof] +<<<<<<< HEAD L'opérateur `typeof` renvoie le type de l'argument. Il est utile lorsqu'on souhaite traiter différemment les valeurs de différents types ou de faire une vérification rapide. +======= +The `typeof` operator returns the type of the operand. It's useful when we want to process values of different types differently or just want to do a quick check. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c L'appel `typeof x` renvoie une chaîne de caractères avec le nom du type : diff --git a/1-js/02-first-steps/07-type-conversions/article.md b/1-js/02-first-steps/07-type-conversions/article.md index 1cca5f32c..e67aafd0c 100644 --- a/1-js/02-first-steps/07-type-conversions/article.md +++ b/1-js/02-first-steps/07-type-conversions/article.md @@ -34,7 +34,11 @@ La conversion `String` est assez évidente. Un `false` devient `"false"`, `null` ## Numeric Conversion +<<<<<<< HEAD La conversion numérique se produit automatiquement dans les fonctions et les expressions mathématiques. +======= +Numeric conversion in mathematical functions and expressions happens automatically. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Par exemple, lorsque la division `/` est appliqué à des non-numéros : diff --git a/1-js/02-first-steps/08-operators/article.md b/1-js/02-first-steps/08-operators/article.md index 79a08c217..04e10d391 100644 --- a/1-js/02-first-steps/08-operators/article.md +++ b/1-js/02-first-steps/08-operators/article.md @@ -50,9 +50,11 @@ Le résultat de `a % b` est le [reste](https://fr.wikipedia.org/wiki/Reste) de l Par exemple : ```js run + alert( 5 % 2 ); // 1, le reste de 5 divisé par 2 alert( 8 % 3 ); // 2, le reste de 8 divisé par 3 -alert( 8 % 2 ); // 0, le reste de 8 divisé par 2 +alert( 8 % 4 ); // 0, le reste de 8 divisé par 4 + ``` ### Exponentiation ** @@ -68,7 +70,7 @@ alert( 2 ** 3 ); // 2³ = 8 alert( 2 ** 4 ); // 2⁴ = 16 ``` -Mathématiquement, l'exponentiation est également définie pour les nombres non entiers. +Tout comme en mathématiques, l'opérateur d'exponentiation est également défini pour les nombres non entiers. Par exemple, une racine carrée est une exponentiation de `½` : diff --git a/1-js/02-first-steps/10-ifelse/article.md b/1-js/02-first-steps/10-ifelse/article.md index 8008ef912..c8f5e1a18 100644 --- a/1-js/02-first-steps/10-ifelse/article.md +++ b/1-js/02-first-steps/10-ifelse/article.md @@ -68,7 +68,8 @@ if (cond) { ## La clause "else" -L'instruction `if` peut contenir un bloc optionnel "else". Il s'exécute lorsque la condition est fausse. + +L'instruction `if` peut contenir un bloc optionnel `else`. Il s'exécute lorsque la condition est fausse. Par exemple : ```js run @@ -180,10 +181,12 @@ alert( message ); Il peut être difficile au début de comprendre ce qui se passe. Mais après un examen plus approfondi, nous constatons que ce n’est qu’une séquence de tests ordinaire. + 1. Le premier point d'interrogation vérifie si `age < 3`. -2. Si vrai -- retourne `'Coucou bébé !'`, sinon il franchit les deux points `":"` et vérifie si `age < 18`. -3. Si vrai -- retourne `'Salut !'`, sinon -- il franchit à nouveau les deux points suivants `":"` et vérifie si `age < 100`. -4. Si vrai -- retourne `'Salutations !'`, sinon -- il franchit enfin les derniers deux points `":"` et retourne `'Quel âge inhabituel !'`. + +2. Si vrai -- retourne `'Hi, baby!'`, Sinon, il continue avec l'expression après les deux points ":" suivants et vérifie si `age < 18`. +3. Si vrai -- retourne `'Hello!'`, Sinon, il continue avec l'expression après les deux points ":" suivants et vérifie si `age < 100`. +4. Si vrai -- retourne `'Greetings!'`, Sinon, l'expression continue après les derniers deux-points et retourne `'What an unusual age!'`. La même logique utilisant `if..else` : diff --git a/1-js/02-first-steps/12-nullish-coalescing-operator/article.md b/1-js/02-first-steps/12-nullish-coalescing-operator/article.md index 29dd88e96..dce6bdd8c 100644 --- a/1-js/02-first-steps/12-nullish-coalescing-operator/article.md +++ b/1-js/02-first-steps/12-nullish-coalescing-operator/article.md @@ -76,7 +76,11 @@ alert(firstName || lastName || nickName || "Anonymous"); // Supercoder */!* ``` +<<<<<<< HEAD Historiquement, l'opérateur OR `||` était là en premier. Il existe depuis le début de JavaScript, donc les développeurs l'utilisaient à de telles fins depuis longtemps. +======= +Historically, the OR `||` operator was there first. It's been there since the beginning of JavaScript, so developers were using it for such purposes for a long time. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c D'un autre côté, l'opérateur de coalescence des nuls `??` n'a été ajouté à JavaScript que récemment, et la raison en était que les gens n'étaient pas tout à fait satisfaits de `||`. diff --git a/1-js/02-first-steps/18-javascript-specials/article.md b/1-js/02-first-steps/18-javascript-specials/article.md index cf1dc95b3..395c36b49 100644 --- a/1-js/02-first-steps/18-javascript-specials/article.md +++ b/1-js/02-first-steps/18-javascript-specials/article.md @@ -105,6 +105,7 @@ Plus d’informations dans : et . Nous utilisons un navigateur comme environnement de travail. Les fonctions de base de l'interface utilisateur sont les suivantes : +<<<<<<< HEAD [`prompt(question[, default])`](mdn:api/Window/prompt) : Posez une question et retournez soit ce que le visiteur a entré, soit `null` s'il clique sur "cancel". @@ -113,6 +114,16 @@ Nous utilisons un navigateur comme environnement de travail. Les fonctions de ba [`alert(message)`](mdn:api/Window/alert) : Affiche un `message`. +======= +[`prompt(question, [default])`](https://developer.mozilla.org/en-US/docs/Web/API/Window/prompt) +: Ask a `question`, and return either what the visitor entered or `null` if they clicked "cancel". + +[`confirm(question)`](https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm) +: Ask a `question` and suggest to choose between Ok and Cancel. The choice is returned as `true/false`. + +[`alert(message)`](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert) +: Output a `message`. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Toutes ces fonctions sont *modales*, elles suspendent l'exécution du code et empêchent le visiteur d'interagir avec la page tant qu'il n'a pas répondu. @@ -146,7 +157,11 @@ Affectations : Il y a une assignation simple : `a = b` et des combinés comme `a *= 2`. Bitwise +<<<<<<< HEAD : Les opérateurs au niveau du bit fonctionnent avec des entiers 32 bits au niveau du bit le plus bas : voir la [doc](mdn:/JavaScript/Guide/Expressions_and_Operators#bitwise_operators) quand ils sont nécessaires. +======= +: Bitwise operators work with 32-bit integers at the lowest, bit-level: see the [docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#bitwise_operators) when they are needed. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Conditionnel : Le seul opérateur avec trois paramètres : `cond ? resultA : resultB`. Si `cond` est vrai, retourne `resultA`, autrement `resultB`. diff --git a/1-js/04-object-basics/09-object-toprimitive/article.md b/1-js/04-object-basics/09-object-toprimitive/article.md index c9222e0da..124bacd31 100644 --- a/1-js/04-object-basics/09-object-toprimitive/article.md +++ b/1-js/04-object-basics/09-object-toprimitive/article.md @@ -228,8 +228,14 @@ Comme nous le savons déjà, de nombreux opérateurs et fonctions effectuent des Si nous passons un objet en argument, il y a deux étapes de calcul : +<<<<<<< HEAD 1. L'objet est converti en primitive (en utilisant les règles décrites ci-dessus). 2. Si cela est nécessaire pour d'autres calculs, la primitive résultante est également convertie. +======= +If we pass an object as an argument, then there are two stages of calculations: +1. The object is converted to a primitive (using the rules described above). +2. If necessary for further calculations, the resulting primitive is also converted. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Par exemple : diff --git a/1-js/05-data-types/03-string/article.md b/1-js/05-data-types/03-string/article.md index da9d19453..1953ba8cf 100644 --- a/1-js/05-data-types/03-string/article.md +++ b/1-js/05-data-types/03-string/article.md @@ -505,6 +505,7 @@ Cette méthode a en fait deux arguments supplémentaires spécifiés dans [la do ## Résumé +<<<<<<< HEAD - Il existe 3 types de quotes : simples (`'`), doubles (`"`) et les backticks (`` ` ``). Les backticks permettent à une chaîne de s'étendre sur plusieurs lignes et d'intégrer des expressions `${…}`. - Nous pouvons utiliser des caractères spéciaux, comme un saut de ligne `\n`. - Pour obtenir un caractère d'une string, utilisez `[]` ou la méthode `at`. @@ -512,6 +513,15 @@ Cette méthode a en fait deux arguments supplémentaires spécifiés dans [la do - Pour mettre une chaîne de caractères en minuscule ou en majuscule, utilisez les méthodes `toLowerCase` ou `toUpperCase`. - Pour rechercher un substring, utilisez `indexOf`, ou `includes` / `startsWith` / `endsWith` pour de simple vérifications. - Pour comparer les chaînes de caractères en fonction de la langue, utilisez la méthode `localeCompare`, si non ils sont comparés par les codes de caractères. +======= +- There are 3 types of quotes. Backticks allow a string to span multiple lines and embed expressions `${…}`. +- We can use special characters, such as a line break `\n`. +- To get a character, use: `[]` or `at` method. +- To get a substring, use: `slice` or `substring`. +- To lowercase/uppercase a string, use: `toLowerCase/toUpperCase`. +- To look for a substring, use: `indexOf`, or `includes/startsWith/endsWith` for simple checks. +- To compare strings according to the language, use: `localeCompare`, otherwise they are compared by character codes. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Il existe plusieurs autres méthodes utiles dans les strings : @@ -521,4 +531,8 @@ Il existe plusieurs autres méthodes utiles dans les strings : Les strings ont aussi des méthodes pour rechercher / remplacer avec des expressions régulières. Mais c’est un sujet important, il est donc expliqué dans une autre section de ce tutoriel . +<<<<<<< HEAD De plus, à partir de maintenant, il est important de savoir que les chaînes de caractères sont basées sur l'encodage Unicode, et donc il y a des problèmes avec les comparaisons. Il y a plus d'informations sur Unicode dans le chapitre . +======= +Also, as of now it's important to know that strings are based on Unicode encoding, and hence there're issues with comparisons. There's more about Unicode in the chapter . +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c diff --git a/1-js/05-data-types/04-array/article.md b/1-js/05-data-types/04-array/article.md index 480576a48..05610b823 100644 --- a/1-js/05-data-types/04-array/article.md +++ b/1-js/05-data-types/04-array/article.md @@ -97,7 +97,7 @@ Le style "virgule de fin" facilite l'insertion et la suppression d'éléments, c Let's say we want the last element of the array. -Some programming languages allow to use negative indexes for the same purpose, like `fruits[-1]`. +Some programming languages allow the use of negative indexes for the same purpose, like `fruits[-1]`. Although, in JavaScript it won't work. The result will be `undefined`, because the index in square brackets is treated literally. diff --git a/1-js/05-data-types/05-array-methods/article.md b/1-js/05-data-types/05-array-methods/article.md index 43639c4d3..6507965a0 100755 --- a/1-js/05-data-types/05-array-methods/article.md +++ b/1-js/05-data-types/05-array-methods/article.md @@ -255,7 +255,11 @@ alert( arr.includes(1) ); // true Veuillez noter que `indexOf` utilise l'égalité stricte `===` pour la comparaison. Donc, si nous cherchons "faux", il trouve exactement "faux" et non le zéro. +<<<<<<< HEAD Si nous voulons vérifier si `item` existe dans le tableau et n'avons pas besoin de l'index exact, alors `arr.includes` est préféré. +======= +If we want to check if `item` exists in the array, and don't need the index, then `arr.includes` is preferred. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c La méthode [arr.lastIndexOf](mdn:js/Array/lastIndexOf) est la même que `indexOf`, mais recherche de droite à gauche. diff --git a/1-js/05-data-types/07-map-set/article.md b/1-js/05-data-types/07-map-set/article.md index 3d4df6967..ac6dab44d 100644 --- a/1-js/05-data-types/07-map-set/article.md +++ b/1-js/05-data-types/07-map-set/article.md @@ -9,10 +9,15 @@ Mais ce n'est pas suffisant pour la vie réelle. C'est pourquoi `Map` et `Set` e ## Map +<<<<<<< HEAD Une [Map](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Map) (dictionnaire de donnée) permet, comme pour un `Object`, de stocker plusieurs éléments sous la forme de clés-valeurs. Sauf que cette fois, les clés peuvent être de n'importe quel type. +======= +[Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) is a collection of keyed data items, just like an `Object`. But the main difference is that `Map` allows keys of any type. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Voici les méthodes et les propriétés d'une `Map` : +<<<<<<< HEAD - `new Map()` -- crée la map. - [`map.set(key, value)`](mdn:js/Map/set) -- stocke la valeur par la clé. - [`map.get(key)`](mdn:js/Map/get) -- renvoie la valeur par la clé, `undefined` si `key` n'existe pas dans la map. @@ -20,6 +25,15 @@ Voici les méthodes et les propriétés d'une `Map` : - [`map.delete(key)`](mdn:js/Map/delete) -- supprime la valeur par la clé. - [`map.clear()`](mdn:js/Map/clear) -- supprime tout de la map. - [`map.size`](mdn:js/Map/size) -- renvoie le nombre actuel d'éléments. +======= +- [`new Map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/Map) -- creates the map. +- [`map.set(key, value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set) -- stores the value by the key. +- [`map.get(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get) -- returns the value by the key, `undefined` if `key` doesn't exist in map. +- [`map.has(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has) -- returns `true` if the `key` exists, `false` otherwise. +- [`map.delete(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete) -- removes the element (the key/value pair) by the key. +- [`map.clear()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear) -- removes everything from the map. +- [`map.size`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size) -- returns the current element count. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Par exemple : @@ -106,15 +120,27 @@ map.set('1', 'str1') ``` ```` +<<<<<<< HEAD ## Parcourir les éléments d'une `Map` Il existe 3 façons de parcourir les éléments d'une `map` : +======= +## Iteration over Map +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c - [`map.keys()`](mdn:js/Map/keys) -- renvoie un itérable pour les clés, - [`map.values()`](mdn:js/Map/values) -- renvoie un itérable pour les valeurs, - [`map.entries()`](mdn:js/Map/entries) -- renvoie un itérable pour les entrées `[key, value]`, il est utilisé par défaut dans `for..of`. +<<<<<<< HEAD Par exemple : +======= +- [`map.keys()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/keys) -- returns an iterable for keys, +- [`map.values()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values) -- returns an iterable for values, +- [`map.entries()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries) -- returns an iterable for entries `[key, value]`, it's used by default in `for..of`. + +For instance: +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c ```js run let recipeMap = new Map([ @@ -167,7 +193,11 @@ let map = new Map([ alert( map.get('1') ); // str1 ``` +<<<<<<< HEAD Si nous avons un objet simple et que nous souhaitons en créer une `Map`, nous pouvons utiliser la méthode intégrée [Object.entries(obj)](mdn:js/Object/entries) qui renvoie un tableau de paires clé/valeur pour un objet exactement dans ce format. +======= +If we have a plain object, and we'd like to create a `Map` from it, then we can use built-in method [Object.entries(obj)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) that returns an array of key/value pairs for an object exactly in that format. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Nous pouvons donc créer une `Map` à partir d'un objet de la manière suivante : @@ -238,16 +268,29 @@ C'est la même chose, car `Object.fromEntries` attend un objet itérable en argu ## Set +<<<<<<< HEAD `Set` est une liste sans doublons. +======= +A [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) is a special type collection - "set of values" (without keys), where each value may occur only once. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Ses principales méthodes sont : +<<<<<<< HEAD - `new Set(iterable)` -- crée le set et si un objet `iterable` est fourni (généralement un tableau), copie les valeurs de celui-ci dans le set. - [`set.add(value)`](mdn:js/Set/add) -- ajoute une valeur, renvoie le set lui-même. - [`set.delete(value)`](mdn:js/Set/delete) -- supprime la valeur, renvoie `true` si `value` existait au moment de l'appel, sinon `false`. - [`set.has(value)`](mdn:js/Set/has) -- renvoie `true` si la valeur existe dans le set, sinon `false`. - [`set.clear()`](mdn:js/Set/clear) -- supprime tout du set. - [`set.size`](mdn:js/Set/size) -- renvoie le nombre actuel d’éléments. +======= +- [`new Set([iterable])`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/Set) -- creates the set, and if an `iterable` object is provided (usually an array), copies values from it into the set. +- [`set.add(value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/add) -- adds a value, returns the set itself. +- [`set.delete(value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete) -- removes the value, returns `true` if `value` existed at the moment of the call, otherwise `false`. +- [`set.has(value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/has) -- returns `true` if the value exists in the set, otherwise `false`. +- [`set.clear()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear) -- removes everything from the set. +- [`set.size`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size) -- is the elements count. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Ce qu'il faut surtout savoir c'est que lorsque l'on appelle plusieurs fois `set.add(value)` avec la même valeur, la méthode ne fait rien. C'est pourquoi chaque valeur est unique dans un `Set`. @@ -278,7 +321,11 @@ for (let user of set) { } ``` +<<<<<<< HEAD Nous aurions aussi pu utiliser un tableau (`Array`) en vérifiant avant chaque insertion que l'élément n'existe pas en utilisant [arr.find](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/find). Cependant les performances auraient été moins bonnes car cette méthode parcours chaque élément du tableau. `Set` est beaucoup plus efficace car il est optimisé en interne pour vérifier l'unicité des valeurs. +======= +The alternative to `Set` could be an array of users, and the code to check for duplicates on every insertion using [arr.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find). But the performance would be much worse, because this method walks through the whole array checking every element. `Set` is much better optimized internally for uniqueness checks. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c ## Parcourir un Set @@ -302,16 +349,27 @@ C'est pour la compatibilité avec `Map` où le callback `forEach` passé possèd Les méthodes pour parcourir les éléments d'une `Map` peuvent être utilisées : +<<<<<<< HEAD - [`set.keys()`](mdn:js/Set/keys) -- renvoie un objet itérable pour les valeurs, - [`set.values()`](mdn:js/Set/values) -- identique à `set.keys()`, pour compatibilité avec `Map`, - [`set.entries()`](mdn:js/Set/entries) -- renvoie un objet itérable pour les entrées `[value, value]`, existe pour la compatibilité avec `Map`. +======= +- [`set.keys()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/keys) -- returns an iterable object for values, +- [`set.values()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/values) -- same as `set.keys()`, for compatibility with `Map`, +- [`set.entries()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/entries) -- returns an iterable object for entries `[value, value]`, exists for compatibility with `Map`. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c ## Résumé +<<<<<<< HEAD `Map` -- est une collection de clé valeurs. +======= +[`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) -- is a collection of keyed values. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Méthodes et propriétés : +<<<<<<< HEAD - `new Map([iterable])` -- crée la map, avec un `iterable` facultatif (par exemple un tableau) de paires `[key,value]` pour l'initialisation. - [`map.set(key, value)`](mdn:js/Map/set) -- stocke la valeur par la clé, renvoie la map elle-même. - [`map.get(key)`](mdn:js/Map/get) -- renvoie la valeur par la clé, `undefined` si `key` n'existe pas dans la map. @@ -319,22 +377,44 @@ Méthodes et propriétés : - [`map.delete(key)`](mdn:js/Map/delete) -- supprime la valeur par la clé, retourne `true` si `key` existait au moment de l'appel, sinon `false`. - [`map.clear()`](mdn:js/Map/clear) -- supprime tout de la map. - [`map.size`](mdn:js/Map/size) -- renvoie le nombre actuel d'éléments. +======= +- [`new Map([iterable])`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/Map) -- creates the map, with optional `iterable` (e.g. array) of `[key,value]` pairs for initialization. +- [`map.set(key, value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set) -- stores the value by the key, returns the map itself. +- [`map.get(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get) -- returns the value by the key, `undefined` if `key` doesn't exist in map. +- [`map.has(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has) -- returns `true` if the `key` exists, `false` otherwise. +- [`map.delete(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete) -- removes the element by the key, returns `true` if `key` existed at the moment of the call, otherwise `false`. +- [`map.clear()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear) -- removes everything from the map. +- [`map.size`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size) -- returns the current element count. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c La différence entre `Map` avec un objet traditionel : - N'importe quel type peut être utilisé comme clé. - Accès à des méthodes tels que `size`. +<<<<<<< HEAD `Set` -- est une collection de valeurs uniques. +======= +[`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) -- is a collection of unique values. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Méthodes et propriétés : +<<<<<<< HEAD - `new Set([iterable])` -- crée le set avec un `iterable` facultatif (par exemple un tableau) de valeurs pour l'initialisation. - [`set.add(value)`](mdn:js/Set/add) -- ajoute une valeur (ne fait rien si `value` existe), renvoie le set lui-même. - [`set.delete(value)`](mdn:js/Set/delete) -- supprime la valeur, renvoie `true` si `value` existait au moment de l'appel, sinon `false`. - [`set.has(value)`](mdn:js/Set/has) -- renvoie `true` si la valeur existe dans le set sinon `false`. - [`set.clear()`](mdn:js/Set/clear) -- supprime tout du set. - [`set.size`](mdn:js/Set/size) -- renvoie le nombre actuel d’éléments. +======= +- [`new Set([iterable])`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/Set) -- creates the set, with optional `iterable` (e.g. array) of values for initialization. +- [`set.add(value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/add) -- adds a value (does nothing if `value` exists), returns the set itself. +- [`set.delete(value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/delete) -- removes the value, returns `true` if `value` existed at the moment of the call, otherwise `false`. +- [`set.has(value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/has) -- returns `true` if the value exists in the set, otherwise `false`. +- [`set.clear()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/clear) -- removes everything from the set. +- [`set.size`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/size) -- is the elements count. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c On ne peut pas dire que les éléments dans une `Map` ou un `Set` sont désordonnés car ils sont toujours parcourut par ordre d'insertion. Il est cependant impossible de réorganiser les éléments ou bien de les retrouver par leur index. diff --git a/1-js/05-data-types/08-weakmap-weakset/article.md b/1-js/05-data-types/08-weakmap-weakset/article.md index 0a4f3d2db..97cba7c6c 100644 --- a/1-js/05-data-types/08-weakmap-weakset/article.md +++ b/1-js/05-data-types/08-weakmap-weakset/article.md @@ -1,9 +1,19 @@ +<<<<<<< HEAD # WeakMap et WeakSet +======= + +# WeakMap and WeakSet +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Comme nous le savons du chapitre , le moteur JavaScript stocke une valeur en mémoire pendant qu'elle est accessible et peut potentiellement être utilisée. Par exemple : +<<<<<<< HEAD +======= +For instance: + +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c ```js let john = { name: "John" }; @@ -55,13 +65,21 @@ john = null; // écraser la référence */!* ``` +<<<<<<< HEAD `WeakMap` est fondamentalement différent dans cet aspect. Il n'empêche pas le nettoyage des clés objets. +======= +[`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) is fundamentally different in this aspect. It doesn't prevent garbage-collection of key objects. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Voyons ce que cela signifie sur des exemples. ## WeakMap +<<<<<<< HEAD La première différence entre `Map` et `WeakMap` est que les clés doivent être des objets, pas des valeurs primitives : +======= +The first difference between [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) and [`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) is that keys must be objects, not primitive values: +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c ```js run let weakMap = new WeakMap(); @@ -95,10 +113,10 @@ Comparez-le avec l'exemple du `Map` ci-dessus. Maintenant, si `john` n'existe qu `WeakMap` n'a que les méthodes suivantes : -- `weakMap.get(key)` -- `weakMap.set(key, value)` -- `weakMap.delete(key)` -- `weakMap.has(key)` +- [`weakMap.set(key, value)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set) +- [`weakMap.get(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get) +- [`weakMap.delete(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete) +- [`weakMap.has(key)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has) Pourquoi une telle limitation ? C'est pour des raisons techniques. Si un objet a perdu toutes les autres références (comme `john` dans le code ci-dessus), il doit être automatiquement nettoyé. Mais techniquement, ce n'est pas exactement spécifié *quand le nettoyage a lieu*. @@ -183,6 +201,7 @@ function process(obj) { let result = /* calculs du résultat pour */ obj; cache.set(obj, result); + return result; } return cache.get(obj); @@ -222,6 +241,7 @@ function process(obj) { let result = /* calculer le résultat pour */ obj; cache.set(obj, result); + return result; } return cache.get(obj); @@ -243,11 +263,19 @@ obj = null; ## WeakSet +<<<<<<< HEAD `WeakSet` se comporte de la même manière : - Il est analogue à `Set`, mais nous pouvons seulement ajouter des objets à `WeakSet` (pas de primitives). - Un objet existe dans le set tant qu'il est accessible ailleurs. - Comme `Set`, il prend en charge `add`, `has` et `delete`, mais pas `size`, `keys()` et aucune itération. +======= +[`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) behaves similarly: + +- It is analogous to `Set`, but we may only add objects to `WeakSet` (not primitives). +- An object exists in the set while it is reachable from somewhere else. +- Like `Set`, it supports [`add`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Weakset/add), [`has`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Weakset/has) and [`delete`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Weakset/delete), but not `size`, `keys()` and no iterations. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Étant "weak" (faible), il sert également de stockage supplémentaire. Mais pas pour des données arbitraires, mais plutôt pour des faits "oui/non". Une appartenance à `WeakSet` peut signifier quelque chose à propos de l'objet. @@ -281,9 +309,15 @@ La limitation la plus notable de `WeakMap` et `WeakSet` est l'absence d'itérati ## Résumé +<<<<<<< HEAD `WeakMap` est une sorte de collection `Map` qui n'autorise que des objets comme clés et les supprime avec la valeur associée une fois qu'ils deviennent inaccessibles par d'autres moyens. `WeakSet` est une sorte de collection `Set` qui ne stocke que des objets et les supprime une fois qu'ils deviennent inaccessibles par d'autres moyens. +======= +[`WeakMap`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) is `Map`-like collection that allows only objects as keys and removes them together with associated value once they become inaccessible by other means. + +[`WeakSet`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) is `Set`-like collection that stores only objects and removes them once they become inaccessible by other means. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Leurs principaux avantages sont qu'ils ont une faible référence aux objets, de sorte qu'ils peuvent facilement être supprimés par le garbage collector. diff --git a/1-js/06-advanced-functions/04-var/article.md b/1-js/06-advanced-functions/04-var/article.md index 0b610675d..350e6e4ea 100644 --- a/1-js/06-advanced-functions/04-var/article.md +++ b/1-js/06-advanced-functions/04-var/article.md @@ -58,7 +58,7 @@ alert(test); // ReferenceError: test is not defined Même principe pour les boucles : `var` ne peut pas être locale pour les blocs ni les boucles : -```js +```js run for (var i = 0; i < 10; i++) { var one = 1; // ... diff --git a/1-js/06-advanced-functions/08-settimeout-setinterval/article.md b/1-js/06-advanced-functions/08-settimeout-setinterval/article.md index 2c50c07a0..a197ffde3 100644 --- a/1-js/06-advanced-functions/08-settimeout-setinterval/article.md +++ b/1-js/06-advanced-functions/08-settimeout-setinterval/article.md @@ -27,7 +27,11 @@ En général, c'est une fonction. Pour des raisons historiques, une chaîne de c : La durée d'attente avant l'exécution, en millisecondes (1000ms = 1 seconde), par défaut 0. `arg1`, `arg2`... +<<<<<<< HEAD : Arguments à passer à la fonction (incompatible avec IE9-). +======= +: Arguments for the function +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Par exemple, le code ci-dessous appelle la fonction `sayHi()` une unique fois au bout de 1 seconde : diff --git a/1-js/10-error-handling/2-custom-errors/article.md b/1-js/10-error-handling/2-custom-errors/article.md index 261ee2fea..218d174f4 100644 --- a/1-js/10-error-handling/2-custom-errors/article.md +++ b/1-js/10-error-handling/2-custom-errors/article.md @@ -39,7 +39,7 @@ class Error { Maintenant, héritons de `ValidationError` et mettons-le en action : -```js run untrusted +```js run *!* class ValidationError extends Error { */!* diff --git a/1-js/11-async/03-promise-chaining/article.md b/1-js/11-async/03-promise-chaining/article.md index 6d93ae6cc..0a5e9aa8c 100644 --- a/1-js/11-async/03-promise-chaining/article.md +++ b/1-js/11-async/03-promise-chaining/article.md @@ -74,7 +74,11 @@ promise.then(function(result) { }); ``` +<<<<<<< HEAD Ce que nous avons fait ici n’est que plusieurs gestionnaires pour une promesse. Ils ne se transmettent pas le résultat, ils la traitent de manière indépendante. +======= +What we did here is just adding several handlers to one promise. They don't pass the result to each other; instead they process it independently. +>>>>>>> 285083fc71ee3a7cf55fd8acac9c91ac6f62105c Voici la representation (comparez-la avec l'enchaînement ci-dessus): diff --git a/2-ui/1-document/11-coordinates/article.md b/2-ui/1-document/11-coordinates/article.md index 89a1cf5cb..a1215fcf4 100644 --- a/2-ui/1-document/11-coordinates/article.md +++ b/2-ui/1-document/11-coordinates/article.md @@ -36,7 +36,7 @@ De plus, il existe des propriétés dérivées : ```online Par exemple, cliquez sur ce bouton pour voir les coordonnées de sa fenêtre : -

+