Fonction pure
En programmation informatique, une fonction pure est une fonction qui possède les propriétés suivantes[1],[2] :
- Sa valeur de retour est la même pour les mêmes arguments (pas de variation avec des variables statiques locales, des variables non locales, des arguments mutables de type référence ou des flux d'entrée).
- Son évaluation n'a pas d'effets de bord (pas de mutation de variables statiques locales, de variables non locales, d'arguments mutables de type référence ou de flux d'entrée-sortie).
Une fonction pure est ainsi un analogue informatique d'une fonction mathématique. Certains auteurs, particulièrement de la communauté des langages impératifs, utilisent le terme "pure" pour désigner les fonctions qui ont uniquement la propriété 2 susmentionnée[3].
Exemples
Fonctions pures
Les fonctions C++ suivantes sont pures :
floor, retournant la partie entière par défaut d'un nombre ;max, retournant le maximum de deux valeurs ;sin, retournant le sinus d'un nombre.
Fonctions impures
Les fonctions C++ suivantes sont impures car elles ne vérifient pas la propriété 1 ci-dessus :
- à cause de la variation de la valeur de retour avec une variable non locale
int f() { return x; }
- à cause de la variation de la valeur de retour avec un argument mutable de type référence
int f(int* x) { return *x; }
- à cause de la variation de la valeur de retour avec un flux d'entrée
int f() { int x = 0; std::cin >> x; return x; }
Les fonctions C++ suivantes sont impures car elles ne vérifient la propriété 2 ci-dessus :
- à cause de la mutation d'une variable statique locale
void f() { static int x = 0; ++x; }
- à cause de la mutation d'une variable non locale
void f() { ++x; }
- à cause de la mutation d'un argument mutable de type référence
void f(int* x) { ++*x; }
- à cause de la mutation d'un flux de sortie
void f() { std::cout << "Hello, world!" << std::endl; }
Notes et références
- ↑ (en) Bartosz Milewski, « Basics of Haskell », sur Schoolofhaskell, (consulté le ) : « Here are the fundamental properties of a pure function: 1. A function returns exactly the same result every time it's called with the same set of arguments. In other words a function has no state, nor can it access any external state. Every time you call it, it behaves like a newborn baby with blank memory and no knowledge of the external world. 2. A function has no side effects. Calling a function once is the same as calling it twice and discarding the result of the first call. »
- ↑ (en) Brian Lonsdorf, « Professor Frisby's Mostly Adequate Guide to Functional Programming », sur GitBook, (consulté le ) : « A pure function is a function that, given the same input, will always return the same output and does not have any observable side effect. »
- ↑ (en) « GCC 8.1 Manual », sur GCC, the GNU Compiler Collection, (consulté le )
Voir aussi
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.