Retour aux cours
AI019 Professional

Programmer en Elixir

Un guide complet sur la programmation fonctionnelle et concurrente avec Elixir. Il aborde la transition du penser orienté objet vers le penser fonctionnel, le pattern matching, l'immutabilité, le modèle d'acteur pour la concurrence, et la construction de systèmes distribués robustes avec OTP.

4.8
30.0h
981 étudiants
0 j'aime
Intelligence Artificielle
Commencer à apprendre

Aperçu du cours

📚 Résumé du contenu

Un guide complet sur la programmation fonctionnelle et concurrente avec Elixir. Il couvre la transition de la pensée orientée objet vers une approche fonctionnelle, le pattern matching, l'immutabilité, le modèle d'acteur pour la concurrence, et la construction de systèmes distribués robustes avec OTP.

Maîtrisez l'art de créer des systèmes concurrents résilients grâce à la beauté de la programmation fonctionnelle.

Auteur : Dave Thomas

Remerciements : José Valim, Corey Haines, Bruce Tate, Jessica Kerr, Anthony Eden, Chad Fowler, Kim Shrier, Candace Cunningham, et Potomac Indexing.

🎯 Objectifs d'apprentissage

  1. Comparer le modèle de transformation des données d’Elixir avec la programmation basée sur l’état classique.
  2. Configurer l’interpréteur interactif Elixir (IEx) et exécuter du code Elixir via des scripts et la compilation.
  3. Appliquer l’opérateur de correspondance (=), l’opérateur d’épinglage (^) et le joker (_) pour déstructurer et valider les données.
  4. Expliquer les implications théoriques et pratiques de l’immutabilité sur les performances et la gestion de la mémoire.
  5. Identifier et utiliser les types intégrés d’Elixir, notamment les types Valeur, Système et Collection.
  6. Appliquer les règles d’environnement des variables et l’expression with pour gérer des transformations complexes des données.
  7. Créer et appeler des fonctions anonymes en utilisant à la fois la notation standard et la notation de capture (&).
  8. Implémenter des fonctions nommées au sein de modules en utilisant le pattern matching et la récursivité pour gérer une logique complexe.
  9. Appliquer les clauses de garde et les paramètres par défaut pour contrôler le flux d’exécution des fonctions.
  10. Désassembler et construire des listes : Utiliser le pattern matching tête/queue pour naviguer dans et construire des structures de liste récursives.

🔹 Leçon 1 : Introduction à Elixir et au pattern matching

Aperçu : Cette leçon présente Elixir comme un langage fonctionnel centré sur la transformation des données plutôt que la mutation de l’état. Les étudiants apprendront à naviguer dans l’environnement Elixir (IEx), à compiler et exécuter des scripts, et à maîtriser le pattern matching – le mécanisme fondamental utilisé par Elixir pour lier les variables et contrôler le flux.

Objectifs d’apprentissage :

  • Contraire le modèle de transformation des données d’Elixir avec la programmation classique basée sur l’état.
  • Configurer l’interpréteur interactif Elixir (IEx) et exécuter du code Elixir via des scripts et la compilation.
  • Appliquer l’opérateur de correspondance (=), l’opérateur d’épinglage (^) et le joker (_) pour déstructurer et valider les données.

🔹 Leçon 2 : Immutabilité et bases d’Elixir

Aperçu : Cette leçon explore la philosophie fondamentale d’Elixir : l’immutabilité. Les étudiants apprendront comment Elixir traite les données comme des entités immuables, les avantages en termes de performance de cette approche, et les différents types intégrés – des types simples comme les atomes et les plages aux collections complexes comme les maps et les binaires. La leçon se termine par une exploration approfondie de la portée des variables et de l’expression puissante with.

Objectifs d’apprentissage :

  • Expliquer les implications théoriques et pratiques de l’immutabilité sur les performances et la gestion de la mémoire.
  • Identifier et utiliser les types intégrés d’Elixir, y compris les types Valeur, Système et Collection.
  • Appliquer les règles de portée des variables et l’expression with pour gérer des transformations complexes des données.

🔹 Leçon 3 : Fonctions, modules et opérateur pipeline

Aperçu : Cette leçon explore le cœur de la programmation en Elixir : la transformation fonctionnelle. Elle couvre la transition des fonctions anonymes et des fermetures vers des modules structurés et des fonctions nommées. Les étudiants apprendront à tirer parti du pattern matching, de la récursivité et de l’opérateur pipeline pour créer un code concis, lisible et maintenable tout en interagissant avec la machine virtuelle Erlang sous-jacente.

Objectifs d’apprentissage :

  • Créer et appeler des fonctions anonymes en utilisant à la fois la notation standard et la notation de capture (&).
  • Implémenter des fonctions nommées au sein de modules en utilisant le pattern matching et la récursivité pour gérer une logique complexe.
  • Appliquer les clauses de garde et les paramètres par défaut pour contrôler le flux d’exécution des fonctions.

🔹 Leçon 4 : Listes récursives et structures de données

Aperçu : Cette leçon aborde les mécanismes fondamentaux des listes Elixir à travers la récursivité, en se concentrant spécifiquement sur le schéma « tête et queue » pour traiter et construire des données. Elle passe ensuite à des structures de données complexes – Maps, Structs et listes de mots-clés – en fournissant un cadre décisionnel pour choisir la bonne structure et des techniques avancées pour manipuler des données imbriquées à l’aide du module Access et de la théorie des types d’Elixir.

Objectifs d’apprentissage :

  • Désassembler et construire des listes : Utiliser le pattern matching tête/queue pour naviguer dans et construire des structures de liste récursives.
  • Implémenter des motifs de haut niveau : Créer des fonctions map et reduce personnalisées pour transformer ou agréger des données de liste.
  • Sélectionner les structures de données appropriées : Différencier entre Maps, Structs et listes de mots-clés selon les besoins en performance, ordre et intégrité des données.

🔹 Leçon 5 : Énumérables, flux et traitement des chaînes

Aperçu : Cette leçon explore les deux approches du traitement des collections en Elixir : le module Enum, qui est économe, et le module Stream, qui est paresseux et composable. Elle fournit également une analyse approfondie de la transformation des données via les compréhensions et les mécanismes internes des chaînes Elixir, en distinguant entre les listes de caractères (entre guillemets simples) et les binaires (entre guillemets doubles). Les étudiants apprendront à traiter des structures de données complexes, à gérer des données infinies et à effectuer des extraits de bits de bas niveau.

Objectifs d’apprentissage :

  • Différencier l’évaluation économe et paresseuse lors du traitement des collections.
  • Utiliser les compréhensions de liste avec plusieurs générateurs et filtres pour transformer des données et extraire des informations au niveau des bits.
  • Distinction entre les chaînes entre guillemets simples (listes de caractères) et celles entre guillemets doubles (binaires), et appliquer le module correct (List vs String) pour leur manipulation.

🔹 Leçon 6 : Flux de contrôle, projets Mix et outils professionnels

Aperçu : Cette leçon guide les développeurs dans la transition du développement de fonctions Elixir isolées vers la construction, le test et la surveillance d’applications de qualité professionnelle. Elle couvre les structures de contrôle avancées (case, cond), le cycle de vie d’un projet Mix (de la structure de répertoire aux exécutables CLI), ainsi que la gamme d’outils professionnels utilisés pour le débogage, les tests basés sur des propriétés et la supervision des serveurs.

Objectifs d’apprentissage :

  • Mettre en œuvre une logique de branchement complexe en utilisant case, cond et le traitement des exceptions.
  • Structurer des projets Elixir avec Mix, gérer des dépendances externes comme HTTPoison et Poison, et configurer les environnements d’application.
  • Développer des suites de tests robustes en utilisant ExUnit, DocTest et les tests basés sur des propriétés avec StreamData.

🔹 Leçon 7 : Concurrence et nœuds distribués

Aperçu : Cette leçon explore la transition des applications Elixir mono-processus vers des systèmes distribués. Elle couvre les mécanismes de gestion des messages, la persistance des processus grâce aux boucles récursives terminales, et la gestion robuste du cycle de vie des processus via les liens et les moniteurs. Enfin, elle introduit le modèle de distribution de la machine virtuelle Erlang, enseignant comment connecter des nœuds, les sécuriser avec des cookies, et gérer l’entrée/sortie à travers un réseau.

Objectifs d’apprentissage :

  • Implémenter des processus étatiques et persistants en utilisant la récursion terminale et les délais de message.
  • Construire des arbres de processus tolérants aux erreurs en utilisant les liens (spawn_link) et les moniteurs (spawn_monitor).
  • Configurer et connecter des nœuds distribués en utilisant des conventions de nommage, des cookies de sécurité et l’enregistrement global des processus.

🔹 Leçon 8 : Fondamentaux d’OTP : Serveurs et superviseurs

Aperçu : Cette leçon présente le cadre Open Telecom Platform (OTP) dans l’écosystème Elixir, en mettant particulièrement l’accent sur le comportement GenServer et les modèles de superviseur. Les étudiants apprendront à créer des processus serveurs robustes et étatiques, à différencier la communication synchrone et asynchrone, et à implémenter des arbres de supervision tolérants aux erreurs qui gèrent automatiquement le cycle de vie des processus.

Objectifs d’apprentissage :

  • Définir les composants essentiels d’OTP et implémenter le cycle de vie standard des callbacks GenServer.
  • Différencier et implémenter les schémas de message synchrones (call) et asynchrones (cast).
  • Configurer et déployer un Superviseur pour surveiller les processus workers et maintenir la fiabilité du système face aux défaillances.

🔹 Leçon 9 : Architectures OTP complexes et gestion d’état

Aperçu : Cette leçon passe des GenServers individuels à la conception et au déploiement d’applications OTP complexes multi-composants. Elle couvre la conception architecturale du « Duper », un outil de recherche de fichiers dupliqués, les mécanismes des spécifications d’application OTP, et des techniques avancées de déploiement incluant les mises à jour en direct via Distillery. Elle explore également des alternatives simplifiées de gestion d’état comme Tasks et Agents, offrant un cadre pour choisir l’outil adapté aux besoins spécifiques de concurrence.

Objectifs d’apprentissage :

  • Analyser les exigences de l’application à l’aide du cadre à cinq questions pour identifier les points clés et les caractéristiques d’exécution.
  • Construire une application OTP multi-serveur (Duper) utilisant des serveurs spécialisés (Results, PathFinder, Gatherer) et des superviseurs dynamiques.
  • Effectuer des déploiements de code et des mises à jour en direct avec Distillery, y compris le transfert d’état via le callback code_change.

🔹 Leçon 10 : Métaprogrammation, protocoles et sécurité de type

Aperçu : Cette leçon explore l’extensibilité avancée d’Elixir, en se concentrant sur la manipulation du code en tant que données via la métaprogrammation et les macros. Les étudiants apprendront à atteindre la polymorphisme à l’aide de Protocoles et de Comportements, à structurer des systèmes à grande échelle avec des projets Umbrella, et à implémenter une gestion robuste des erreurs. Enfin, la leçon couvre l’ajout d’une couche d’analyse statique en utilisant le système de types d’Elixir et Dialyzer pour garantir la correction du code.

Objectifs d’apprentissage :

  • Maîtriser l’utilisation de quote et unquote pour injecter et manipuler des blocs de code dans les macros.
  • Implémenter des protocoles et comportements personnalisés pour créer des structures de code polymorphes et réutilisables.
  • Construire des projets Umbrella multi-applications et appliquer des spécifications de type formelles au code Elixir dynamique.