À retenir
- C'est une structure qui encapsule une valeur dans un contexte spécifique.
- Elle facilite le chaînage d'opérations complexes sans effets de bord imprévus.
- Elle est le pilier de la gestion des erreurs et des flux de données en programmation fonctionnelle pure.
Une monade est une sorte de "boîte" ou de conteneur intelligent qui entoure une donnée pour lui ajouter un comportement ou un contexte spécifique (comme la gestion d'une erreur ou d'un délai). Elle permet d'enchaîner des opérations sur cette donnée de manière sécurisée, sans jamais avoir besoin de la "déballer" manuellement, un peu comme un tunnel protecteur qui guide une valeur à travers plusieurs étapes de calcul.
Étymologie
Le mot provient du grec ancien monas signifiant "unité". Initialement utilisé en philosophie pour désigner une entité indivisible, le terme a été emprunté par les mathématiques (théorie des catégories) avant d'être introduit en informatique dans les années 1990, notamment par Eugenio Moggi et Philip Wadler, pour structurer les programmes fonctionnels.
Exemples d'usage
- La monade
Maybe(ouOptional) : elle contient soit une valeur, soit rien, évitant ainsi les plantages de type "NullPointerException". - La monade
IO: elle sert de cadre pour effectuer des actions sur le monde extérieur (écrire dans un fichier, lire un clavier) dans un langage qui interdit normalement les modifications d'état. - La monade
Promise(en JavaScript) : elle encapsule une valeur qui arrivera plus tard, permettant de chaîner des traitements asynchrones.
Cas d'usage
On utilise les monades principalement en programmation fonctionnelle pour gérer proprement les effets de bord (log, entrées/sorties, état global) ou pour traiter des séquences d'opérations qui peuvent échouer à tout moment sans interrompre brutalement le programme.
Bonnes pratiques
Il est recommandé d'utiliser les méthodes de chaînage standard (souvent appelées bind, flatMap ou then) plutôt que de tenter d'extraire la valeur par des conditions manuelles. Cela garantit que le "contexte" (comme la gestion d'erreur) est préservé tout au long du calcul.
Synonymes
Antonymes
Conseil
Pour bien comprendre les monades, ne vous focalisez pas sur les définitions mathématiques abstraites au début. Considérez-les simplement comme un outil de composition de fonctions qui s'occupe de la 'plomberie' (erreurs, logs, attente) à votre place.
Questions fréquentes
Faut-il être un génie en maths pour utiliser une monade ?
Pas du tout. Si vous avez déjà utilisé des Promises en JavaScript ou des Optionals en Java/Swift, vous manipulez déjà des concepts monadiques sans le savoir.
Pourquoi dit-on que c'est un 'foncteur' ?
Un foncteur est simplement une structure qu'on peut transformer (via une fonction map). Une monade est un foncteur amélioré qui sait aussi 'aplatir' des structures imbriquées (une boîte dans une boîte).