PRATIQUE ALGO/METHODES 
Expliquez-moi… Les monades
 
Nombreux sont les concepts auxquels se heurtent les programmeurs qui découvrent les langages fonctionnels. Parmi eux, les monades, moyen de construire et regrouper les traitements de manière séquentielle, tiennent une place proéminente. (17/02/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Mises en avant par les langages fonctionnels, à commencer par Haskell, les monades ne sont pas entrés dans le langage courant de développeurs. Pour tous ceux que la programmation fonctionnelle intéresse [lire notre article du 05/09/03], elles représentent pourtant un outil de programmation puissant et versatile.

En tant que telles, les monades ne sont pas une spécificité de Haskell, ou même des langages fonctionnels. Elles sont accessibles à tout langage pouvant utiliser des closures (fermetures) et des fonctions anonymes. ML, Scheme et Lisp, donc, mais également le trio des langage de scripting : Perl, Python et Ruby, au travers de certaines de leurs capacités fonctionnelles...

Les monades sont un moyen de construire et regrouper les traitements de manière séquentielle. Il faut savoir que les langages fonctionnels purs (sans effets de bords) considèrent qu'afficher des données à l'écran, ou les écrire, est "impur". Un effet de bord est un effet inattendu d'une fonction, et par extension, une modification de l'environnement : changer la valeur d'une variable, par exemple, est un effet de bord. Les monades sont un moyen de briser cette limitation en rendant possible la présence de telles "impuretés" dans un langage "pur". Vous avez suivi ?

Logo du langage Haskell
Les monades sont donc une technique pour introduire une forme de programmation impérative (accès E/S, changement d'état, exceptions…) au sein d'un langage fonctionnel. Elles le font en "emmagasinant", en quelque sorte, les calculs en cours de traitement au sein de blocs séquentiels, eux-mêmes séquençables en calculs. Une monade détermine en quoi ces calculs combinés peuvent créer un nouveau calcul reprenant leurs traitements.

Les monades n'empêchent pas les effets de bord - tout au plus placent-ils un délai dans leur lancement, c'est-à-dire le traitement des calculs agrégés. Leur principal intérêt est de séquencer de manière explicite ces effets de bord, en les obligeant à obéir aux lois de l'algèbre, qui régissent la programmation fonctionnelle.

Les monades autorisent donc une meilleure structure au sein des programmes fonctionnels, en leur offrant une claire séparation des traitements, qui maintiennent la pureté du langage.

En outre, les monades prennent en charge un aspect inconnu aux langages fonctionnels : l'ordre d'évaluation. Là où les fonctions mathématiques n'ont pas à prendre d'ordre en compte (l'évaluation d'une fonction donnera toujours le même résultat, quel que soit le cheminement pris), les effets de bords doivent les considérer, et faire en sorte que tout se déroule dans l'ordre correct. Les monades traitent leurs calculs dans un ordre donné, déterminé par le fait qu'un calcul a besoin du résultat d'un autre pour être réalisé - et donc, par le compilateur.
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page