A transparência referencial é uma característica de partes de programas de computador. Uma parte de um programa é chamada de "referencialmente transparente" se ela puder ser substituída pelo valor que ela devolve sem alterar o comportamento do programa. Uma função referencialmente transparente deve ser pura - deve sempre dar a mesma saída se receber a mesma entrada, e não deve ter nenhum efeito colateral - partes do programa que executam uma ação que não seja a de devolver um valor. O oposto de transparência referencial é a opacidade referencial.

Em matemática, todas as funções são referencialmente transparentes, porque uma função matemática só pode pegar valores para dentro e cuspir um valor para fora. Na programação, isto nem sempre é verdade - uma função pode também descobrir que dia do ano é, ou imprimir uma mensagem para a tela. Devido a esta diferença, algumas pessoas usam outros nomes para funções na programação, como procedimentos.

A transparência referencial permite que programadores e compiladores pensem no código como um sistema de reescrita - algo que pega uma expressão e a substitui por algo mais. Isto pode ajudar em várias tarefas, como por exemplo:

  • Provar que o programa ou código está correto - que ele faz exatamente o que deve fazer, não importa o que aconteça.
  • Tornando um algoritmo mais simples.
  • Tornando mais fácil mudar o código e, ao mesmo tempo, ter certeza de que ele faz o que é suposto fazer.
  • Fazendo o código funcionar mais rápido ou de uma forma que use menos memória.

Há várias maneiras de se fazer a última tarefa - as mais conhecidas são a memorização (salvar respostas após a primeira vez), a eliminação da subexpressão comum (descobrir se vale a pena combinar duas partes do código que são iguais), a avaliação preguiçosa (não encontrar a resposta até que o código realmente precise dela) e a paralelização (trabalhar em vários problemas ao mesmo tempo).