Pureza de función

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 31 de marzo de 2020; las comprobaciones requieren 4 ediciones .

En lenguajes de programación, una función pura  es una función que:

  1. es determinista ;
  2. no tiene efectos secundarios .

Tener solo una de las propiedades no es suficiente para que una función sea pura.

Determinismo de funciones

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.

Efectos secundarios de la función

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.

Ortogonalidad del determinismo y efectos secundarios

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.

Literatura

Enlaces