1.1 · Rappels JavaScript moderne (ES6+) : let/const, fonctions fléchées, destructuration

Niveau 1 · JavaScript & bases Node

1.1Rappels JavaScript moderne (ES6+) : let/const, fonctions fléchées, destructuration

Objectif : maîtriser la syntaxe ES moderne utilisée partout en Node.
Temps estimé : 11 min

Node exécute du JavaScript ; maîtriser le JavaScript moderne (ES6+) est donc le prérequis de tout le reste. « ES6+ » désigne les versions modernes du langage (ECMAScript 2015 et suivantes) qui ont profondément modernisé JavaScript et sont utilisées partout en Node. Commençons par la déclaration de variables. Oubliez l'ancien var (source de bugs par sa portée déroutante) : utilisez const et let. const déclare une constante — une variable qu'on ne réassignera pas (à privilégier par défaut : la plupart des variables ne changent pas de référence). let déclare une variable réassignable (pour les compteurs, accumulateurs, valeurs qui évoluent). Tous deux ont une portée de bloc (limitée aux accolades { } où ils sont déclarés), comportement bien plus prévisible que var. Le réflexe moderne : const par défaut, let si réassignation nécessaire, jamais var.

Les autres éléments incontournables du JS moderne. Les fonctions fléchées (arrow functions) : une syntaxe concise pour écrire des fonctions — (a, b) => a + b au lieu de function(a, b) { return a + b; } — très utilisées, notamment pour les callbacks (omniprésents en Node). Elles ont aussi un comportement particulier du mot-clé this (elles n'ont pas leur propre this, ce qui évite bien des pièges). La destructuration : extraire des valeurs d'objets ou de tableaux en une ligne — const { nom, age } = personne; extrait les propriétés nom et age de l'objet ; const [a, b] = tableau; extrait les deux premiers éléments. Omniprésente pour importer des modules et manipuler des données. Les template literals (chaînes gabarits, avec les accents graves) : pour insérer des variables dans des chaînes proprement — `Bonjour ${nom}, tu as ${age} ans` — au lieu de concaténer avec +. Le spread (...) et le rest : étaler un tableau/objet ([...tableau1, ...tableau2] pour fusionner) ou regrouper des arguments. Les paramètres par défaut, les méthodes de tableaux (map, filter, reduce, forEach — la manière moderne et fonctionnelle de traiter des collections), les objets et classes, et bien sûr les Promises et async/await (le cœur de l'asynchrone, section 1-2). Ces fonctionnalités ne sont pas des « options » : elles constituent le JavaScript qu'on écrit réellement aujourd'hui, et tout code Node moderne les emploie constamment. Si vous venez d'un JavaScript ancien ou débutez, investir dans ces bases est indispensable — car sans une maîtrise fluide du JS moderne, tout le reste de Node paraîtra confus. Ce niveau consolide donc le langage AVANT de plonger dans les spécificités de Node.

Vocabulaire de la section

const / let (vs var)
const : constante non réassignable (à privilégier). let : variable réassignable. Tous deux à portée de bloc. `var` est à éviter (portée déroutante).
Fonction fléchée (arrow)
Syntaxe concise `(a) => ...` pour écrire des fonctions, très utilisée pour les callbacks ; sans `this` propre (évite des pièges).
Destructuration
Extraction de valeurs d'objets/tableaux en une ligne : `const { nom } = obj;` ou `const [a, b] = arr;`. Omniprésente (imports, données).
Template literal
Chaîne avec accents graves permettant d'insérer des variables : `Bonjour ${nom}` — plus propre que la concaténation avec +.
map / filter / reduce
Méthodes de tableaux modernes pour transformer, filtrer et agréger des collections de façon fonctionnelle ; la manière moderne de traiter les données.
Vérifiez votre compréhension

const, let ou var — lequel utiliser et pourquoi ?

Tutoriel 1.1
Tutos « 1.1 » JavaScript ES6 ES2015 let const fléchée destructuration (recherche)
Cliquer pour voir les résultats à jour ↗

En pratique — Consolider le JavaScript moderne

  1. Déclarez des variables avec `const` (par défaut) et `let` (si réassignation) ; constatez la portée de bloc. Bannissez `var`.
  2. Écrivez des fonctions fléchées et utilisez-les comme callbacks ; comparez à la syntaxe `function` classique.
  3. Pratiquez la destructuration (`const { a, b } = obj`) et les template literals (`` `${variable}` ``) sur des exemples concrets.
  4. Traitez un tableau avec map (transformer), filter (filtrer) et reduce (agréger) plutôt qu'avec des boucles for classiques.
Vous maîtrisez le JavaScript moderne (const/let, fléchées, destructuration, template literals, spread, map/filter/reduce) — le prérequis de tout le développement Node.

Points clés à retenir

  • JS MODERNE (ES6+) = prérequis de Node. Variables : `const` par défaut, `let` si réassignation, JAMAIS `var` (portée de bloc, prévisible).
  • Fonctions FLÉCHÉES (`(a) => ...`) : concises, idéales pour les callbacks omniprésents en Node ; sans `this` propre.
  • DESTRUCTURATION (`const { nom } = obj`), TEMPLATE LITERALS (`` `${x}` ``), SPREAD/REST (`...`) : la syntaxe qu'on écrit réellement aujourd'hui.
  • MÉTHODES DE TABLEAUX (map/filter/reduce/forEach) = traitement moderne et fonctionnel des collections. Sans JS moderne fluide, tout Node paraît confus.

Questions fréquentes

const, let ou var : lequel utiliser, et pourquoi éviter var ?

C'est l'une des premières bonnes habitudes à prendre, et elle repose sur des différences réelles de comportement qui affectent la fiabilité de votre code. La règle moderne, simple et à appliquer systématiquement : const par défaut, let si vous devez réassigner, jamais var. Détaillons. const déclare une variable qu'on ne réassignera pas (dont la référence ne changera pas). Utilisez-le par défaut, car : (1) la plupart des variables ne sont jamais réassignées (une valeur calculée, un objet configuré, un résultat) — const exprime cette intention ; (2) const PROTÈGE contre les réassignations accidentelles (si vous essayez de réassigner une const, JavaScript lève une erreur — un bug attrapé tôt) ; (3) il rend le code plus LISIBLE (en voyant const, on sait que cette variable ne changera pas de valeur — moins de charge mentale). Nuance importante : const empêche la RÉASSIGNATION de la variable, mais si c'est un objet ou un tableau, son CONTENU reste modifiable (const arr = []; arr.push(1); fonctionne — on ne réassigne pas arr, on modifie son contenu). const protège la « boîte », pas forcément ce qu'il y a dedans. let déclare une variable qu'on VA réassigner : un compteur (let i = 0; i++;), un accumulateur, une valeur qui évolue au fil du code. Utilisez let UNIQUEMENT quand la réassignation est nécessaire. var est l'ancienne façon de déclarer (avant ES6), à ÉVITER pour plusieurs raisons de fiabilité : (1) Portée déroutante : var a une portée de FONCTION (pas de bloc), ce qui produit des comportements contre-intuitifs — une var déclarée dans un if ou une boucle « fuit » en dehors du bloc, source de bugs. const et let ont une portée de BLOC (limitée aux accolades), bien plus prévisible et sûre. (2) Hoisting piégeux : var est « remontée » en haut de sa portée avec la valeur undefined, permettant d'utiliser une variable AVANT sa déclaration (comportement confus). const/let ont une « zone morte temporelle » qui interdit cela (erreur claire si on les utilise avant déclaration). (3) Pas de protection : var permet la redéclaration et la réassignation sans garde-fou. En clair, var favorise des bugs subtils que const/let éliminent par une portée et un comportement plus stricts et prévisibles. Pourquoi cette règle est importante en Node : le code asynchrone (callbacks, boucles) est particulièrement sensible aux problèmes de portée — utiliser const/let (portée de bloc) évite des bugs classiques (la fameuse « boucle qui capture toujours la dernière valeur » avec var). Un exemple célèbre : une boucle for avec var dans des callbacks capture la MÊME variable partagée (bug) ; avec let, chaque itération a sa propre variable (correct). Adoptez donc le réflexe dès maintenant : (1) écrivez const par défaut ; (2) si votre éditeur/linter signale que vous réassignez, changez en let ; (3) n'écrivez JAMAIS var (les linters modernes comme ESLint le signalent d'ailleurs). Cette discipline, adoptée tôt, rend votre code plus sûr, plus lisible, et vous évite toute une catégorie de bugs de portée. C'est un des marqueurs du JavaScript moderne bien écrit — et une habitude qui ne coûte rien une fois prise.

Faut-il vraiment maîtriser map/filter/reduce, ou les boucles for suffisent-elles ?

Les boucles for « fonctionnent » et vous pouvez tout faire avec elles, mais map/filter/reduce sont le style MODERNE et idiomatique de traitement des collections en JavaScript — les maîtriser rend votre code plus lisible, plus expressif, et vous êtes de toute façon obligé de les COMPRENDRE car elles sont partout dans le code Node réel. Voyons pourquoi elles valent l'investissement. Ce qu'elles font (chacune exprime une INTENTION claire) : (1) map : TRANSFORME chaque élément d'un tableau en un nouveau, produisant un nouveau tableau de même taille. « Transforme cette liste de nombres en leurs carrés », « transforme ces objets utilisateurs en leurs noms ». [1,2,3].map(n => n * 2)[2,4,6]. (2) filter : GARDE les éléments qui satisfont une condition, produisant un tableau plus petit. « Garde les utilisateurs actifs », « garde les nombres pairs ». [1,2,3,4].filter(n => n % 2 === 0)[2,4]. (3) reduce : AGRÈGE tous les éléments en UNE valeur (une somme, un objet, une concaténation). « Additionne tous les prix », « regroupe ces éléments par catégorie ». [1,2,3].reduce((total, n) => total + n, 0)6. (4) forEach : exécute une action pour chaque élément (sans produire de nouveau tableau) — pour des effets de bord (afficher, envoyer). Pourquoi elles sont supérieures aux boucles for pour ces usages : (1) Expressivité / lisibilité : users.filter(u => u.active).map(u => u.name) se lit presque comme une phrase (« garde les actifs, prends leurs noms ») — l'INTENTION est claire d'un coup d'œil. La boucle for équivalente (créer un tableau, itérer, tester, pousser) est plus verbeuse et l'intention se devine moins vite. (2) Moins d'erreurs : pas d'index à gérer manuellement (i, i++, les conditions de fin), pas de tableau à initialiser et remplir à la main — moins d'occasions de se tromper (erreur d'index, oubli d'incrémentation). (3) Chaînage : on enchaîne ces méthodes (.filter().map().reduce()) pour exprimer un pipeline de traitement de données de façon fluide et lisible. (4) Immutabilité : map/filter créent de NOUVEAUX tableaux sans modifier l'original — un style qui évite des bugs (modifier un tableau pendant qu'on l'itère est piégeux). (5) Standard du métier : le code JavaScript/Node moderne (bibliothèques, projets, exemples) utilise massivement ces méthodes — vous DEVEZ les comprendre pour lire et travailler avec du code réel, que vous les préfériez ou non. Faut-il abandonner les boucles for ? Non, elles gardent leur place : (1) quand vous avez besoin d'un contrôle fin (sortir de la boucle avec break, sauter avec continue — que map/filter ne permettent pas) ; (2) pour des boucles qui ne traitent pas une collection (répéter N fois) ; (3) parfois pour la performance sur de très gros volumes (les for peuvent être plus rapides, mais rarement significatif). Il existe aussi for...of (une boucle moderne et lisible pour itérer sur une collection) qui combine simplicité et contrôle. La bonne approche : (1) pour TRANSFORMER, FILTRER, AGRÉGER une collection → map/filter/reduce (expressif, idiomatique) ; (2) pour du contrôle de flux fin ou des répétitions → boucles (for, for...of, while). En pratique, dans le code Node moderne, map/filter/reduce sont omniprésents (traiter des résultats de base de données, transformer des données d'API, etc.). Ne les fuyez pas par habitude des boucles : investissez pour les maîtriser (elles sont simples une fois comprises), et votre code gagnera en clarté et en modernité. Et surtout, vous saurez LIRE le code des autres, qui les utilise partout. C'est un pilier du JavaScript moderne, indispensable en pratique.

Autres ressources