2011-01-26 41 views
40

Leí la explicación de Wikipedia de idempotence. 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 encuentro la diferencia ...¿Las funciones idempotentes son las mismas que las funciones puras?

¿Son equivalentes?

+1

puede ser útil para alguien que busca entender el concepto: http://pedrorijo.com/blog/fp-concepts/ – pedrorijo91

Respuesta

41

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.
De manera similar, borrar un registro por GUID (no por conteo) es idempotente, porque la fila permanece eliminada después de las llamadas subsiguientes. (Llamadas adicionales no hacen nada)

+0

Ejemplo de efecto secundario idempotente? ¿Es eso algo así como imprimir en stdout? –

+0

@Rafe: Cambiar una base de datos. Por ejemplo, cambiar un campo en un registro. –

+1

@Rafe: imprimir a stdout no es idempotente porque cada llamada imprime otra línea. – SLaks

10

Un pura función es una función sin efectos secundarios, donde la salida es exclusivamente determinado por la entrada - es decir, llamando f(x) dará el mismo resultado independientemente del número de veces que se llámalo.

Un idempotente función es uno que se puede aplicar varias veces sin cambiar el resultado - es decir, f(f(x)) es la misma que f(x).

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

+7

Pero una función pura _debe_ ser idempotente. – SLaks

+0

Supongo que tu explicación es función idempotente "matemática". Es diferente del campo de computación. –

+2

@ user590083: No, su explicación es válida en el campo de la informática. Sin embargo, el estado de computación cambiado es parte del resultado, en el contexto de la respuesta de Anon. – Brian

3

No, una función idempotente cambiará el estado del programa/objeto/máquina - y hará que el 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 invoca.

4

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

Cada función pura es un efecto secundario idempotente porque las funciones puras nunca producen efectos secundarios aunque se llamen más de una vez. Sin embargo, la idempotencia del valor de retorno significa que f (f (x)) = f (x) que no se ve afectada por la pureza.

0

Función pura = Idempotente + Sin cambios en las variables de entrada.

+0

en la programación funcional, una función idempotente cumple con f (f (fx)) = f (x). Una función pura no tiene efectos secundarios y siempre devuelve el mismo valor para los mismos argumentos de entrada. – lohfu

1

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

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

En informática, el término idempotente se utiliza más ampliamente para describir una operación que producirá los mismos resultados si se ejecuta una vez o varias veces. Esto puede tener un significado diferente según el contexto en el que se aplica. En el caso de los 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 la 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.

Cuestiones relacionadas