Transparansi referensial adalah fitur dari bagian-bagian program komputer. Suatu bagian dari program disebut "referentially transparent" jika dapat diganti dengan nilai yang diberikannya kembali tanpa mengubah perilaku program. Fungsi yang transparan secara referensial harus murni - harus selalu memberikan output yang sama jika mengambil input yang sama, dan tidak boleh memiliki efek samping - bagian dari program yang melakukan tindakan selain memberikan nilai kembali. Kebalikan dari transparansi referensial adalah referential opacity.

Dalam matematika, semua fungsi bersifat transparan secara referensial, karena fungsi matematika hanya dapat mengambil nilai masuk dan mengeluarkan nilai keluar. Dalam pemrograman, hal ini tidak selalu benar - sebuah fungsi mungkin juga dapat mengetahui hari apa tahun ini, atau mencetak pesan ke layar. Karena perbedaan ini, beberapa orang menggunakan nama lain untuk fungsi dalam pemrograman, seperti prosedur.

Transparansi referensial memungkinkan programmer dan kompiler untuk memikirkan kode sebagai sistem penulisan ulang - sesuatu yang mengambil ekspresi dan menggantinya dengan sesuatu yang lain. Hal ini dapat membantu dengan beberapa tugas, seperti:

  • Membuktikan bahwa program atau kode itu benar-bahwa program atau kode itu melakukan apa yang seharusnya dilakukan, apa pun yang terjadi.
  • Membuat algoritma lebih sederhana.
  • Sehingga lebih mudah untuk mengubah kode sambil tetap yakin bahwa kode tersebut melakukan apa yang seharusnya.
  • Membuat kode berjalan lebih cepat atau dengan cara yang menggunakan lebih sedikit memori.

Ada beberapa cara untuk melakukan tugas terakhir - yang paling terkenal adalah memoisasi (menyimpan jawaban setelah pertama kali), eliminasi subekspresi umum (mencari tahu apakah layak untuk menggabungkan dua bagian kode yang sama), evaluasi malas (tidak menemukan jawaban sampai kode benar-benar membutuhkannya), dan paralelisasi (mengerjakan beberapa masalah pada saat yang sama).