Una función pura es una función (un bloque de código) que siempre devuelve el mismo resultado si se pasan los mismos argumentos . No depende de ningún cambio de estado o datos durante la ejecución de un programa. Más bien, solo depende de sus argumentos de entrada.
Además, una función pura no produce ningún efecto secundario observable, como requests de red o mutación de datos, etc.
Veamos la siguiente función de JavaScript:
function calculateGST( productPrice ) { return productPrice * 0.05; }
La función anterior siempre devolverá el mismo resultado, si pasamos el mismo precio del producto. En otras palabras, su salida no se ve afectada por ningún otro valor/cambio de estado. Entonces podemos llamar a la función «calculateGST» una función pura.
Ahora, veamos una función más a continuación:
var tax = 20; function calculateGST( productPrice ) { return productPrice * (tax / 100) + productPrice; }
Pausa un segundo y ¿puedes adivinar si la función anterior es pura o no?
Si adivinaste que no lo es, ¡tienes razón! No es una función pura ya que la salida depende de una variable externa «impuesto». Entonces, si el valor del impuesto se actualiza de alguna manera, obtendremos una salida diferente aunque pasemos el mismo precio del producto como parámetro a la función.
Pero aquí tenemos que hacer una nota importante:
Nota: Si una función pura llama a una función pura, esto no es un efecto secundario y la función que llama todavía se considera pura. (Ejemplo: usar Math.max() dentro de una función)
A continuación se presentan algunos efectos secundarios (pero no limitados a) que una función no debería producir para ser considerada como una función pura:
- Hacer una solicitud HTTP
- Mutando datos
- Impresión en una pantalla o consola
- Consulta/Manipulación DOM
- Matemáticas.aleatoria()
- Obtener la hora actual