¿Son las funciones idempotentes lo mismo que las funciones puras?


Leí la explicación de Wikipedia sobre la idempotencia. Sé que significa que la salida de una función está determinada por su entrada. Pero recuerdo que escuché un concepto muy similar: función pura. Los busco en Google, pero no puedo encontrar su diferencia...

Son equivalentes?

Author: Richard JP Le Guen, 2011-01-26

6 answers

Una función idempotente puede causar efectos secundarios idempotentes.

Una función pura no puede.

Por ejemplo, una función que establece el texto de un cuadro de texto es idempotente (porque varias llamadas mostrarán el mismo texto), pero no pura.
Del mismo modo, eliminar un registro por GUID (no por count) es idempotente, porque la fila permanece eliminada después de llamadas posteriores. (las llamadas adicionales no hacen nada)

 47
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-26 03:57:28

Una función pure es una función sin efectos secundarios donde la salida es únicamente determinada por la entrada, es decir, llamar a f(x) dará el mismo resultado sin importar cuántas veces lo llame.

Una función idempotente es aquella que se puede aplicar varias veces sin cambiar el resultado, es decir, f(f(x)) es lo mismo que f(x).

Una función puede ser pura, idempotente, ambas o ninguna.

 13
Author: Anon.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-26 03:58:04

Pureza funcional significa que no hay efectos secundarios. Por otro lado, idempotencia significa que una función es invariante con respecto a múltiples llamadas.

Cada función pura es un efecto secundario idempotente porque las funciones puras nunca producen efectos secundarios, incluso si se llaman más de una vez. Sin embargo, el valor de retorno idempotencia significa que f(f(x)) = f(x) que no se efectúa por la pureza.

 4
Author: jhuni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-28 02:53:58

No, una función idempotente cambiará el estado del programa/objeto/máquina - y hará ese cambio solo una vez (a pesar de las llamadas repetidas). Una función pura no cambia nada, y continúa proporcionando un resultado (de retorno) cada vez que se llama.

 3
Author: Brent Arias,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-26 03:59:53

Una gran fuente de confusión es que en ciencias de la computación, parece haber diferentes definiciones para idempotencia en programación imperativa y funcional.

De wikipedia ( https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning )

En ciencias de la computación, el término idempotente se usa más ampliamente para describir una operación que producirá los mismos resultados si se ejecuta una o varias veces. Esto puede tener un significado diferente dependiendo de el contexto en el que se aplica. En el caso de métodos o llamadas de subrutinas con efectos secundarios, por ejemplo, significa que el estado modificado sigue siendo el mismo después de la primera llamada. En programación funcional, sin embargo, una función idempotente es aquella que tiene la propiedad f(f(x)) = f(x) para cualquier valor x.

Dado que una función pura no produce efectos secundarios, soy de la opinión de que la idempotencia no tiene nada que ver con la pureza.

 1
Author: lohfu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-24 08:37:15

Pure function = Idempotent + Sin cambios en las variables de entrada.

 0
Author: Abhishek Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-07 14:11:05