Fonctions impures

Les fonctions impures, c'est un concept assez simple mais très important en programmation, surtout quand on parle de Programmation fonctionnelle. Imagine que tu as une machine à café. Si chaque fois que tu mets de l'eau et du café, elle te donne exactement la même tasse de café, on peut dire que cette machine est "pure". Elle ne fait que ce qu'on attend d'elle et rien d'autre. Mais si des fois, elle décide de te donner un expresso et d'autres fois un cappuccino avec la même quantité de café et d'eau, ou bien elle affiche l'heure qu'il est, alors elle est "impure". Elle fait quelque chose de différent ou affecte quelque chose en dehors de la tasse de café.

En programmation, une fonction est dite impure si :

  1. Elle produit des Effets de bord : cela signifie qu'elle fait quelque chose d'autre que simplement retourner un résultat. Par exemple, modifier une variable extérieure, imprimer quelque chose à l'écran, enregistrer un fichier, etc.
  2. Son résultat n'est pas prévisible uniquement à partir de ses entrées : si tu appelles une fonction avec les mêmes paramètres plusieurs fois et qu'elle te donne des résultats différents, alors elle est impure. Cela peut arriver si la fonction utilise des données extérieures à ses entrées pour calculer son résultat, comme l'heure actuelle ou des données aléatoires.

Les fonctions impures ne sont pas forcément mauvaises. En fait, elles sont souvent nécessaires parce qu'un programme qui ne fait rien du tout (sans effets secondaires) n'est pas très utile. Mais elles peuvent rendre le code plus difficile à comprendre et à tester, car tu ne peux pas toujours prévoir ce qu'elles vont faire.

Pour aller plus loin dans la compréhension et l'utilisation des fonctions impures, tu pourrais explorer :

  • Programmation fonctionnelle vs. programmation impérative : comprendre les différences et quand utiliser l'une ou l'autre.
  • Effets secondaires : apprendre à les identifier, les gérer et les isoler pour garder un code propre et maintenable.
  • Pureté et idempotence (programmation) : découvrir d'autres propriétés des fonctions et comment elles affectent la conception de ton programme.
  • Techniques de tests (programmation) : apprendre à tester des fonctions impures, ce qui peut être plus compliqué que de tester des fonctions pures.
  • Concepts de concurrence et d'Immutabilité : voir comment la gestion de l'état mutable par les fonctions impures joue un rôle dans la programmation concurrente.