Transparencia referencial


La transparencia referencial y la opacidad referencial son propiedades de partes de programas de computadora . Una expresión se llama referencialmente transparente si se puede reemplazar con su valor correspondiente (y viceversa) sin cambiar el comportamiento del programa. [1] Esto requiere que la expresión sea pura , es decir, el valor de la expresión debe ser el mismo para las mismas entradas y su evaluación no debe tener efectos secundarios . Una expresión que no es referencialmente transparente se llama referencialmente opaca.

En matemáticas , todas las aplicaciones de funciones son referencialmente transparentes , por la definición de lo que constituye una función matemática . Sin embargo, este no es siempre el caso en la programación, donde los términos procedimiento y método se utilizan para evitar connotaciones engañosas. En la programación funcional solo se consideran funciones referencialmente transparentes. Algunos lenguajes de programación proporcionan medios para garantizar la transparencia referencial. Algunos lenguajes de programación funcionales exigen transparencia referencial para todas las funciones.

La importancia de la transparencia referencial es que permite al programador y al compilador razonar sobre el comportamiento del programa como un sistema de reescritura . Esto puede ayudar a probar la corrección , simplificar un algoritmo , ayudar a modificar el código sin romperlo u optimizar el código mediante la memorización, la eliminación de subexpresiones comunes , la evaluación diferida o la paralelización .

El concepto parece haberse originado en Principia Mathematica de Alfred North Whitehead y Bertrand Russell (1910-13). [2] Fue adoptado en filosofía analítica por Willard Van Orman Quine . En §30 de Word and Object (1960), Quine da esta definición:

Un modo de contención φ es referencialmente transparente si, siempre que la ocurrencia de un término singular t sea puramente referencial en un término u oración ψ(t), también es puramente referencial en el término u oración contenedora φ(ψ(t)).

El término apareció en su uso contemporáneo de la informática, en la discusión de variables en lenguajes de programación , en el conjunto seminal de notas de conferencias de Christopher Strachey Conceptos fundamentales en lenguajes de programación (1967). Las notas de la lección hacían referencia a la palabra y el objeto de Quine en la bibliografía.