La transparencia referencial es una característica de las partes de los programas informáticos. Una parte de un programa se llama "referencialmente transparente" si puede ser sustituida por el valor que devuelve sin cambiar el comportamiento del programa. Una función transparente desde el punto de vista de la referencia debe ser pura: siempre debe dar la misma salida si toma la misma entrada, y no debe tener efectos secundarios, es decir, partes del programa que realicen una acción distinta a la de devolver un valor. Lo contrario de la transparencia referencial es la opacidad referencial.

En matemáticas, todas las funciones son transparentes desde el punto de vista de la referencia, ya que una función matemática sólo puede recibir valores y escupir un valor. En programación, esto no siempre es cierto: una función también puede averiguar qué día del año es, o imprimir un mensaje en la pantalla. Debido a esta diferencia, algunas personas utilizan otros nombres para las funciones en programación, como procedimientos.

La transparencia referencial permite a los programadores y compiladores pensar en el código como un sistema de reescritura: algo que toma una expresión y la sustituye por otra. Esto puede ayudar en varias tareas, como por ejemplo:

  • Demostrar que el programa o el código es correcto, que hace exactamente lo que se supone que debe hacer, pase lo que pase.
  • Hacer un algoritmo más sencillo.
  • Facilitando la modificación del código, pero con la seguridad de que hace lo que se supone que debe hacer.
  • Hacer que el código se ejecute más rápido o de forma que consuma menos memoria.

Hay varias formas de realizar esta última tarea: las más conocidas son la memoización (guardar las respuestas después de la primera vez), la eliminación de subexpresiones comunes (averiguar si vale la pena combinar dos partes del código que son iguales), la evaluación perezosa (no encontrar la respuesta hasta que el código realmente la necesite) y la paralelización (trabajar en varios problemas al mismo tiempo).