La trasparenza referenziale è una caratteristica di parti di programmi per computer. Una parte di un programma è chiamata "trasparente referenziale" se può essere sostituita con il valore che restituisce senza modificare il comportamento del programma. Una funzione di trasparenza referenziale deve essere pura - deve sempre dare lo stesso output se prende lo stesso input, e non deve avere effetti collaterali - parti del programma che eseguono un'azione diversa da quella di restituire un valore. L'opposto della trasparenza referenziale è l'opacità referenziale.

In matematica, tutte le funzioni sono referenzialmente trasparenti, perché una funzione matematica può solo prendere valori e sputarne uno. Nella programmazione, questo non è sempre vero - una funzione potrebbe anche scoprire che giorno dell'anno è, o stampare un messaggio sullo schermo. A causa di questa differenza, alcune persone usano altri nomi per le funzioni in programmazione, come le procedure.

La trasparenza referenziale permette ai programmatori e ai compilatori di pensare al codice come a un sistema di riscrittura - qualcosa che prende un'espressione e la sostituisce con qualcos'altro. Questo può aiutare in diversi compiti, come ad esempio:

  • Dimostrare che il programma o il codice è corretto - che fa esattamente quello che dovrebbe fare, non importa cosa.
  • Rendere un algoritmo più semplice.
  • Rendere più facile cambiare il codice pur essendo sicuri che faccia quello che deve fare.
  • Far girare il codice più velocemente o in modo da consumare meno memoria.

Ci sono diversi modi di fare l'ultimo compito - i più noti sono la memorizzazione (salvare le risposte dopo la prima volta), la comune eliminazione delle sottoespressioni (capire se vale la pena combinare due parti del codice che sono uguali), la valutazione pigra (non trovare la risposta fino a quando il codice non ne ha veramente bisogno), e la parallelizzazione (lavorare su più problemi allo stesso tempo).