Según Wikipedia:
En la programación de computadoras, una función puede describirse como pura si ambas afirmaciones sobre la función se mantienen: la función siempre evalúa el mismo valor de resultado dados los mismos valores de argumento. El valor del resultado de la función no puede depender de ninguna información oculta o estado que pueda cambiar a medida que avanza la ejecución del programa o entre diferentes ejecuciones del programa, ni puede depender de ninguna entrada externa de los dispositivos de E / S. La evaluación del resultado no causa ningún efecto secundario o salida semánticamente observable, como la mutación de objetos mutables o la salida a dispositivos de E / S.
Me pregunto si es posible escribir una función que calcule si una función es pura o no. Código de ejemplo en Javascript:
function sum(a,b) {
return a+b;
}
function say(x){
console.log(x);
}
isPure(sum) // True
isPure(say) // False
if (rand(1000000)<2) return WRONG_ANSWER
, probar la función muchas veces para obtener un comportamiento consistente no ayudará. Pero, si tiene acceso a la definición de la función, la prueba es trivial.
say
llamadas console.log
que son impuras también say
son impuras.