← Web Dev

JavaScript Moderne (ES6+)

Débutant
🧠Comprendre en lisant n'est pas savoir écrire.🧠Un module est fini quand tu peux le reproduire fenêtre fermée.🧠Écris le problème en français avant d'écrire du code.🧠Une question impossible cache trois questions faciles.🧠Retape le code à la main. Puis referme et réécris-le.🧠Essaie d'abord, cherche ensuite.🧠Cherche « comment on écrit ça », jamais « qu'est-ce que je dois faire ».🧠Pour comprendre du code, casse-le.⌨️Une fonction qui plante sur un cas limite n'est pas finie.⌨️Si un bloc a un nom clair, il mérite d'être une fonction.⌨️Savoir lire une erreur vaut plus que connaître dix méthodes.⌨️Diagnostiquer, c'est éliminer dans l'ordre — pas essayer au hasard.⌨️Une optimisation sans mesure avant/après est une croyance.🔍Regarde le fichier avant de le charger.🔍Une performance anormalement bonne est une hypothèse à réfuter.🔍Cette valeur existe-t-elle à l'instant où je dois prédire ?🔍fit sur le train, transform partout.🔍Un chiffre qu'on ne sait pas raconter est un chiffre qu'on n'a pas compris.🔍Un graphique sans question n'a rien à dire.🤖Un score d'entraînement parfait n'est jamais une bonne nouvelle.🤖Le jeu de test ne se regarde qu'une fois.🤖Plus tu essaies de configurations, plus ton meilleur score est optimiste.🤖Un seuil de décision est un arbitrage économique, pas un réglage technique.🤖Commence toujours par une baseline. Note son score.🤖Le meilleur modèle n'est pas le plus précis, c'est celui qu'on peut maintenir.🚀Un modèle en production n'est pas un livrable, c'est un système vivant.🚀Un secret publié est un secret compromis.🚀Pour chaque permission : que se passe-t-il si cette machine est compromise ?🚀Un post-mortem qui cherche un coupable ne produit aucune amélioration.🚀« Nous n'utilisons pas cette variable » n'est pas une garantie d'équité.🚀Rends l'arbitrage explicite et chiffré. Ne le tranche pas en silence.🚀Un résultat qu'on ne sait pas reproduire est une anecdote.

🎯 Objectifs d'apprentissage

À l'issue de ce module, tu seras capable de :

  • 01Manipuler le DOM et gérer les événements sans framework
  • 02Maîtriser l'asynchrone : promesses, async/await, gestion d'erreurs
  • 03Consommer une API REST et traiter les cas d'échec
  • 04Expliquer closures, portée et le comportement de `this`

Prérequis

Module HTML & CSS

JavaScript ES6+ : les fondamentaux

60 min

JavaScript est le seul langage natif du navigateur. Avec Node.js, il s'étend au backend. ES6+ (2015 et après) l'a rendu moderne et élégant.

Variables modernes

const nom = "Emile";          // constante (recommandé par défaut)
let score = 0;                 // variable modifiable
// var : éviter — portée ambiguë

// Destructuring
const { prenom, age } = utilisateur;
const [premier, ...reste] = tableau;

// Template literals
const message = `Bonjour ${nom}, tu as ${age} ans`;

Fonctions modernes

// Arrow function
const carre = x => x ** 2;
const additionner = (a, b) => a + b;

// Paramètres par défaut
const saluer = (nom = "visiteur") => `Bonjour ${nom}`;

// Spread & rest
const fusion = [...tableau1, ...tableau2];
const somme = (...nombres) => nombres.reduce((a, b) => a + b, 0);

Tableaux modernes — les méthodes fonctionnelles :

const modules = ["Python", "ML", "Deep Learning", "NLP"];

modules.map(m => m.toUpperCase())           // transformer
modules.filter(m => m.length > 5)           // filtrer
modules.find(m => m.startsWith("ML"))       // trouver
modules.reduce((acc, m) => acc + 1, 0)     // agréger
modules.sort()                              // trier

Modules ES6

// curriculum.js
export const MODULES = ["Python", "ML"];
export function getModule(id) { ... }

// main.js
import { MODULES, getModule } from "./curriculum.js";

Ressource : javascript.info — https://javascript.info (le meilleur tutoriel JS gratuit)

✍️ Exercices de la leçon

2 exercices

Fais-les dans l'ordre, dans un vrai fichier .py — pas dans ta tête. Ne déplie la correction qu'après avoir écrit quelque chose, même faux.

🔧

Exercice AChaîner map, filter et reduce

Application directe · Tu appliques ce que tu viens de lire.

const modules = [
  { id: "py",  titre: "Python",        heures: 12, niveau: "debutant",     fait: true  },
  { id: "ml",  titre: "ML classique",  heures: 20, niveau: "intermediaire", fait: false },
  { id: "dl",  titre: "Deep Learning", heures: 18, niveau: "intermediaire", fait: false },
  { id: "nlp", titre: "NLP",           heures: 16, niveau: "avance",        fait: true  },
  { id: "ops", titre: "MLOps",         heures: 14, niveau: "avance",        fait: false },
];

Sans écrire une seule boucle for, produis :

  1. 1.la liste des titres en majuscules
  2. 2.les modules de niveau avancé non terminés
  3. 3.le total d'heures restantes (modules non faits)
  4. 4.un objet { debutant: 1, intermediaire: 2, avance: 2 } comptant les modules par niveau
  5. 5.le module le plus long

Puis écris le point 3 en une seule chaîne de méthodes.

🎯

Exercice BQuand la chaîne fonctionnelle est un mauvais choix

Page blanche · Aucun squelette : à toi de choisir la méthode.

Page blanche. Refactoring et jugement.

function analyser(transactions) {
  const resultat = {};
  for (let i = 0; i < transactions.length; i++) {
    const t = transactions[i];
    if (t.statut !== "validee") continue;
    if (!resultat[t.client]) {
      resultat[t.client] = { total: 0, nb: 0 };
    }
    resultat[t.client].total += t.montant;
    resultat[t.client].nb += 1;
  }
  for (const client in resultat) {
    resultat[client].moyenne = resultat[client].total / resultat[client].nb;
  }
  return resultat;
}
  1. 1.réécris cette fonction en style fonctionnel
  2. 2.compare les deux versions sur trois critères : lisibilité, performance, débogabilité
  3. 3.trouve un cas où tu garderais la boucle `for` — il en existe plusieurs, cite-en deux avec un argument précis
  4. 4.mesure les deux versions sur 1 million de transactions

Le point 3 est le vrai exercice. « Le fonctionnel c'est mieux » est un slogan, pas un raisonnement.

🤖

Question sur cette leçon ? Clique sur 💬 Demander au tuteur en bas à droite.