Fonction pure

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

En programmation informatique, une fonction ou une expression est dite pure lorsque son évaluation ne produit aucun effet de bord, tel qu'un changement d'état ou une opération d'entrées-sorties[1],[2].

La sortie d'une fonction pure peut dépendre d'un état interne ou externe, par exemple d'une variable statique locale ou d'une variable globale respectivement, et ainsi sa sortie peut varier selon le contexte d'exécution. L'essentiel est que la fonction ne modifie pas elle-même cet état.

Exemples de fonctions pures[modifier | modifier le code]

  • sin(x), retournant le sinus du nombre x.
  • length(s), retournant la longueur de la chaîne de caractères s.
  • encrypt(k, d), retournant le résultat du chiffrement d'une donnée d par un algorithme de chiffrement déterministe et une clé de chiffrement k (telle que AES).
  • N'importe quelle fonction qui utilise des variables libres sans les modifier, telle que today() ou int f(x) { return x + a; }.

Exemples de fonctions impures[modifier | modifier le code]

  • random(), car chaque appel utilise un générateur de nombres pseudo-aléatoire qui met à jour un état "graine" global. Si la fonction est modifiée pour prendre la graine en argument, c'est-à-dire random(seed), alors la fonction devient pure car elle n'a plus d'effets de bord.
  • printf(), car son effet de bord est d'écrire sur la sortie standard.

Notes et références[modifier | modifier le code]

  1. (en) « An Overview of Miranda », sur University of Kent, (consulté le 29 juin 2018) : « The Miranda programming language is purely functional - there are no side effects or imperative features of any kind. »
  2. (en) « GCC 8.1 Manual », sur GCC, the GNU Compiler Collection, (consulté le 29 juin 2018) : « Many functions have no effects except the return value and their return value depends only on the parameters and/or global variables. Calls to such functions can be subject to common subexpression elimination and loop optimization just as an arithmetic operator would be. These functions should be declared with the attribute pure. For example, int square (int) __attribute__ ((pure)); says that the hypothetical function square is safe to call fewer times than the program says. Some common examples of pure functions are strlen or memcmp. Interesting non-pure functions are functions with infinite loops or those depending on volatile memory or other system resource, that may change between two consecutive calls (such as feof in a multithreading environment). The pure attribute imposes similar but looser restrictions on a function’s definition than the const attribute: it allows the function to read global variables. Decorating the same function with both the pure and the const attribute is diagnosed. Because a pure function cannot have any side effects it does not make sense for such a function to return void. Declaring such a function is diagnosed. »

Voir aussi[modifier | modifier le code]