75 votes

Les fonctions idempotentes sont-elles les mêmes que les fonctions pures ?

J'ai lu l'explication de Wikipédia sur l'idempotence. Je sais que cela signifie que la sortie d'une fonction est déterminée par son entrée. Mais je me souviens avoir entendu un concept très similaire : la fonction pure. Je les google mais je ne trouve pas leur différence...

Sont-ils équivalents ?

77voto

SLaks Points 391154

Une fonction idempotente peut provoquer des effets secondaires idempotents.

Une fonction pure ne le peut pas.

Par exemple, une fonction qui définit le texte d'une zone de texte est idempotente (car plusieurs appels afficheront le même texte), mais pas pure. De même, la suppression d'un enregistrement par GUID (pas par nombre) est idempotente, car la ligne reste supprimée après les appels suivants. (les appels supplémentaires ne font rien)

24voto

Anon. Points 26829

Une fonction pure est une fonction sans effets secondaires où la sortie est uniquement déterminée par l'entrée - c'est-à-dire qu'appeler f(x) donnera le même résultat quel que soit le nombre de fois que vous l'appelez.

Une fonction idempotente est une fonction qui peut être appliquée plusieurs fois sans modifier le résultat - c'est-à-dire que f(f(x)) est identique à f(x) .

Une fonction peut être pure, idempotente, les deux ou aucune.

10voto

Brent Arias Points 7104

Non, une fonction idempotente changera l'état du programme/objet/machine - et ne fera ce changement qu'une seule fois (malgré les appels répétés). Une fonction pure ne change rien et continue de fournir un résultat (retour) à chaque fois qu'elle est appelée.

6voto

jhuni Points 327

La pureté fonctionnelle signifie qu'il n'y a pas d'effets secondaires. D'autre part, l'idempotence signifie qu'une fonction est invariante par rapport aux appels multiples.

Chaque fonction pure est un effet secondaire idempotent car les fonctions pures ne produisent jamais d'effets secondaires même si elles sont appelées plus d'une fois. Cependant, l'idempotence de la valeur de retour signifie que f(f(x)) = f(x) ce qui n'est pas affecté par la pureté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X