Transparencia referencial
La transparencia referencial es un término utilizado en la programación funcional que se refiere a la propiedad por la cual "en un programa, una expresión E del lenguaje puede ser sustituida por otra de igual valor V, resultando en un programa cuya semántica no va a diferir de la del original".Esta propiedad no se da en lenguajes imperativos, donde abundan los efectos colaterales por asignaciones destructivas.Por ejemplo, en esta clase escrita en lenguaje Java: No podemos sustituir dame() por su valor, en el método hola(), pues suprimiríamos el efecto lateral de incremento dando un estado del programa diferente al original.Como ya se ha dicho, otra complicación de los lenguajes sin transparencia referencial es que dificultan el razonamiento ecuacional: los métodos a1(),a2() no devuelven los mismos resultados con un mismo valor inicial de m. Por ejemplo: para m=0, a1() devolverá 0 la primera vez que se ejecute, mientras que a2() devolverá 1 la primera vez que se ejecute.También es muy poderosa a la hora de verificar un programa (demostrar matemáticamente que cumple la especificación), ya que podemos utilizar propiedades ya demostradas de todas las subexpresiones que constituyen una expresión y que son válidas en cualquier contexto.