En lenguajes de programación, una función pura es una función que:
Tener solo una de las propiedades no es suficiente para que una función sea pura.
El no determinismo de una función es la capacidad de una función para devolver diferentes valores a pesar de que se le pasan los mismos valores de los argumentos de entrada como entrada. En este caso, no es posible construir una tabla inequívoca de valores de función; para tales funciones, las tablas de valores parecen una lista (tal vez infinita) de posibles valores que toma la función en un conjunto dado de parámetros de entrada.
Una función es determinista si devuelve el mismo resultado para el mismo conjunto de valores de entrada.
En los lenguajes imperativos, algunas funciones en el proceso de realizar sus cálculos pueden modificar los valores de las variables globales, realizar operaciones de E/S, responder a situaciones excepcionales llamando a sus controladores. Estas funciones se denominan funciones con efectos secundarios . Otro tipo de efectos secundarios es la modificación de los parámetros (variables) pasados a la función, cuando el valor del parámetro de entrada también cambia en el proceso de cálculo del valor de salida de la función.
Casi cualquier lenguaje de programación le permite describir funciones sin efectos secundarios. Sin embargo, algunos lenguajes fomentan o incluso requieren ciertos tipos de funciones para usar efectos secundarios. Por ejemplo, en muchos lenguajes orientados a objetos, se pasa un parámetro oculto a una función miembro de clase: un puntero a la instancia de clase en nombre de la cual se llama a la función correspondiente (por ejemplo, en C ++ , este parámetro se llama this , y en Object Pascal - self ), que esta función modifica implícitamente. Sin embargo, en C++ , puede especificar el modificador const en un método de clase , lo que le dice al compilador que el método no modifica los datos de clase.
Por lo general, las funciones que tienen efectos secundarios no son deterministas, por lo que a veces se confunden funciones sin efectos secundarios, funciones deterministas y funciones puras. De hecho, estas son diferentes propiedades de las funciones. Por ejemplo, la función rand , que devuelve un número aleatorio, o la función hipotética GetGlobalVarX , que devuelve el valor de la variable global X (y no hace nada más), no son deterministas, aunque no tienen efectos secundarios. Pero la función hipotética print , que muestra texto en pantalla y siempre devuelve 0, por el contrario, es determinista, pero tiene un efecto secundario (imprimir texto en pantalla). Ninguno de ellos es puro.