Retour aux cours
AI020 Professional

JavaScript élégant : Une introduction moderne à la programmation

Un guide complet sur la programmation moderne en utilisant JavaScript. Ce cours couvre les principes fondamentaux de la programmation, la spécification du langage JavaScript, l'intégration avec les navigateurs web et le développement côté serveur avec Node.js, incluant cinq applications réelles basées sur des projets concrets.

5.0
30.0h
561 étudiants
0 j'aime
Intelligence Artificielle
Commencer à apprendre

Aperçu du cours

📚 Résumé du contenu

Un guide complet sur la programmation moderne en utilisant JavaScript. Le cours couvre les principes fondamentaux de la programmation, la spécification du langage JavaScript, l'intégration avec les navigateurs web, ainsi que le développement côté serveur avec Node.js, incluant cinq applications pratiques dans des projets du monde réel.

Une exploration profonde et élégante au cœur de la programmation JavaScript.

Auteur : Marijn Haverbeke

Remerciements : Soutenu par 454 contributeurs financiers ; illustrations de Wasif Hyder, Max Xiantu, Margarita Martínez, José Menor, Jim Tierney, Dyle MacGregor, Jeff Avallone, Thomas Palef et Antonio Perdomo Pastor.

🎯 Objectifs d'apprentissage

  1. Définir ce qu'est un programme et expliquer les différents niveaux d'abstraction dans les langages informatiques.
  2. Utiliser les nombres JavaScript et les opérateurs arithmétiques pour produire des valeurs.
  3. Déclarer et mettre à jour des variables tout en respectant les conventions de nommage et les restrictions sur les mots réservés.
  4. Mettre en œuvre un flux de contrôle robuste à l'aide des boucles do, for et des instructions switch, tout en maintenant un code propre grâce à l'indentation et aux commentaires.
  5. Définir et appeler des fonctions en utilisant plusieurs notations, gérer les paramètres, les arguments facultatifs et les portées lexicales imbriquées.
  6. Appliquer des concepts fonctionnels avancés tels que la récursion, les fermetures (closures) et la pile d'appel pour résoudre des énigmes algorithmiques complexes.
  7. Utiliser des méthodes spécialisées pour les objets et les tableaux afin de gérer des structures de données complexes et des chaînes de caractères.
  8. Implémenter des fonctions d'ordre supérieur (filter, map, reduce) pour abstraire la logique et composer des transformations de données.
  9. Naviguer et manipuler la chaîne de prototypes afin de créer des instances d'objets structurées, réutilisables et des interfaces polymorphes.
  10. Implémenter des interfaces polymorphes pour gérer des visualisations de données complexes (tableaux).

🔹 Leçon 1 : Fondamentaux JavaScript et structure des programmes

Aperçu : Cette leçon présente les concepts fondamentaux de la programmation en JavaScript, passant de la définition philosophique d’un programme aux mécanismes pratiques du code. Les étudiants exploreront comment les données sont représentées à travers les types et les bits, comment manipuler des valeurs à l’aide des opérateurs, et comment structurer des programmes à l’aide de variables, d’expressions et d’instructions. La leçon traite également des comportements uniques de JavaScript, comme la conversion automatique de type et l’évaluation par court-circuit.

Objectifs d’apprentissage :

  • Définir ce qu’est un programme et expliquer les différents niveaux d’abstraction dans les langages informatiques.
  • Utiliser les nombres JavaScript et les opérateurs arithmétiques pour produire des valeurs.
  • Déclarer et mettre à jour des variables tout en respectant les conventions de nommage et les restrictions sur les mots réservés.

🔹 Leçon 2 : Fonctions et structures de données complexes

Aperçu : Cette leçon explore les blocs de construction essentiels de la programmation structurée, en mettant l’accent sur les flux de contrôle avancés, les techniques de programmation fonctionnelle et l’organisation complexe des données. Les étudiants maîtriseront la manière d’encapsuler la logique dans des fonctions, de gérer la visibilité des variables via les portées et les fermetures, et de manipuler des objets mutables pour analyser des données du monde réel telles que les corrélations statistiques.

Objectifs d’apprentissage :

  • Mettre en œuvre un flux de contrôle robuste à l’aide des boucles do, for et des instructions switch, tout en maintenant un code propre grâce à l’indentation et aux commentaires.
  • Définir et appeler des fonctions en utilisant plusieurs notations, gérer les paramètres, les arguments facultatifs et les portées lexicales imbriquées.
  • Appliquer des concepts fonctionnels avancés tels que la récursion, les fermetures (closures) et la pile d’appel pour résoudre des énigmes algorithmiques complexes.

🔹 Leçon 3 : Fonctions d'ordre supérieur et prototypes

Aperçu : Cette leçon explore la transition entre la manipulation de données de base et les modèles fonctionnels et orientés objet avancés en JavaScript. Elle couvre le stockage efficace des données à l’aide des Maps et des objets globaux, la puissance des fonctions d’ordre supérieur pour abstraire des actions (filtrage, transformation, synthèse), ainsi que les mécanismes fondamentaux du système d’objets JavaScript, notamment les prototypes, les constructeurs et le polymorphisme.

Objectifs d’apprentissage :

  • Utiliser des méthodes spécialisées pour les objets et les tableaux afin de gérer des structures de données complexes et des chaînes de caractères.
  • Implémenter des fonctions d’ordre supérieur (filter, map, reduce) pour abstraire la logique et composer des transformations de données.
  • Naviguer et manipuler la chaîne de prototypes afin de créer des instances d’objets structurées, réutilisables et des interfaces polymorphes.

🔹 Leçon 4 : Programmation orientée objet et gestion des erreurs

Aperçu : Cette leçon explore les modèles avancés orientés objet en JavaScript, en se concentrant sur le polymorphisme à travers des interfaces de disposition de tableau et la conception d’un écosystème simulé ("Vie Électronique"). Elle passe ensuite à la fiabilité logicielle en couvrant le "Mode strict", les techniques de débogage et l’importance d’un test structuré pour atténuer les erreurs fréquentes des développeurs.

Objectifs d’apprentissage :

  • Implémenter des interfaces polymorphes pour gérer des visualisations de données complexes (tableaux).
  • Contrairement à l’héritage et à la composition, construire des structures d’objets extensibles.
  • Gérer le contexte d’exécution (this) au sein des fonctions d’ordre supérieur et des méthodes d’objets.

🔹 Leçon 5 : Correspondance de motifs et modularisation

Aperçu : Cette leçon traite des deux exigences fondamentales de la programmation moderne : le traitement de données textuelles complexes et l’organisation du code en structures maintenables. Les étudiants apprendront à utiliser les expressions régulières pour décrire et manipuler des motifs de texte, puis explorera la modularisation pour isoler le code, gérer les espaces de noms et faciliter la réutilisation.

Objectifs d’apprentissage :

  • Construire et tester des expressions régulières en utilisant la notation littérale et la notation de constructeur.
  • Mettre en œuvre des techniques avancées de correspondance de motifs, y compris le regroupement, le backtracking et la répétition non gourmande.
  • Appliquer les principes de conception modulaire pour éviter la pollution des espaces de noms et découpler les composants du programme.

🔹 Leçon 6 : Conception de langage et environnement Web

Aperçu : Cette leçon explore la transition de la conception logicielle structurée à la création d’un langage de programmation personnalisé appelé "Egg". Elle relie ensuite ces concepts à l’environnement Web en détaillant comment les réseaux, HTML et le modèle d’objet document (DOM) créent une interface programmable pour les navigateurs. Les étudiants apprendront à gérer la complexité du code grâce à la modularité et à manipuler des documents web en direct à l’aide de JavaScript.

Objectifs d’apprentissage :

  • Implémenter des systèmes de modules robustes en utilisant la fonction define et gérer des dépendances complexes.
  • Construire un parseur et un évaluateur fonctionnels pour un langage spécifique au domaine, incluant la gestion de portées et le support des fonctions.
  • Expliquer l’architecture du Web, incluant TCP/IP, la structure HTML et les implications de sécurité du sandbox navigateur.

🔹 Leçon 7 : Événements et plateformes interactives

Aperçu : Cette leçon explore la synergie entre la manipulation du DOM, le style CSS et la gestion complexe des événements pour créer des expériences web interactives et des jeux. Les étudiants apprendront à contrôler la mise en page et l’animation, à gérer la nature asynchrone des entrées utilisateur, à optimiser les performances grâce à des techniques de temporisation, et à concevoir un jeu de plateforme basé sur une grille en utilisant des principes orientés objet.

Objectifs d’apprentissage :

  • Manipuler la mise en page et les styles du DOM : utiliser JavaScript pour lire les dimensions des éléments, appliquer des styles en cascade et animer des éléments à l’aide du positionnement CSS et de la trigonométrie.
  • Maîtriser la coordination des événements : implémenter une gestion avancée des événements incluant le contrôle de propagation, la prévention des actions par défaut, et la gestion d’événements spécialisés (clavier, souris, défilement, focus).
  • Optimiser l’exécution des scripts : utiliser les workers web pour le traitement en arrière-plan et appliquer le debouncing/throttling pour gérer les événements à haute fréquence.

🔹 Leçon 8 : Graphiques Canvas et protocoles réseau

Aperçu : Cette leçon explore la transition de la rendu de jeu basé sur le DOM vers l’API HTML5 Canvas hautement performante, accompagnée des mécanismes fondamentaux de physique pour plateformes 2D. Les étudiants apprendront à implémenter une logique de jeu complexe incluant la gravité et la détection de collisions, tout en maîtrisant les techniques de dessin impératives. Par ailleurs, la leçon introduit le protocole HTTP et l’objet XMLHttpRequest pour gérer la communication client-serveur.

Objectifs d’apprentissage :

  • Implémenter la détection de collisions basée sur une grille et le mouvement guidé par la gravité dans un environnement de jeu.
  • Utiliser l’API HTML5 Canvas pour rendre des chemins, des courbes, des images et des feuilles d’animations sprite.
  • Appliquer des transformations de coordonnées (mise à l’échelle, rotation, retournement) et gérer les états du contexte à l’aide de save et restore.

🔹 Leçon 9 : Formulaires avancés et applications persistantes

Aperçu : Cette leçon explore des techniques avancées de développement web, axées sur la communication asynchrone via XMLHttpRequest et Promises, l’interaction approfondie avec les champs de formulaire HTML, et la persistance des données côté client. Les étudiants apprendront à gérer les requêtes réseau avec des en-têtes personnalisés et à traiter les erreurs dans les flux asynchrones en construisant une application de peinture modulaire et un outil de prise de notes persistant.

Objectifs d’apprentissage :

  • Configurer et exécuter des requêtes réseau asynchrones en utilisant XMLHttpRequest et le chaînage basé sur les Promises.
  • Manipuler des comportements de formulaires complexes, y compris la gestion du focus, le désactivation des champs et la gestion des fichiers.
  • Implémenter un stockage de données côté client à l’aide de localStorage et sessionStorage pour maintenir l’état de l’application.

🔹 Leçon 10 : Développement côté serveur avec Node.js

Aperçu : Cette leçon comble le fossé entre l’interactivité avancée côté client et la logique côté serveur. Les étudiants maîtriseront d’abord des outils avancés de manipulation de canvas et les contraintes de sécurité du navigateur avant de passer à l’environnement Node.js pour créer des serveurs de fichiers asynchrones et des applications web en temps réel à l’aide de sondages longs et de routage RESTful.

Objectifs d’apprentissage :

  • Implémenter des outils de dessin avancés (Ligne, Effacer, Peinture par pulvérisation, Remplissage) et gérer la sécurité du canvas (tainting).
  • Exécuter des scripts côté serveur avec Node.js, gérer les dépendances via NPM et traiter les entrées/sorties asynchrones avec des rappels (callbacks) et des Promises.
  • Construire un serveur HTTP fonctionnel capable de manipuler des fichiers, traiter des requêtes JSON et fournir des mises à jour en temps réel via des sondages longs.