Referans şeffaflığı, bilgisayar programlarının bazı bölümlerinin bir özelliğidir. Bir programın bir parçası, programın davranışını değiştirmeden geri verdiği değerle değiştirilebiliyorsa "referanssal olarak şeffaf" olarak adlandırılır. Referanssal olarak şeffaf bir fonksiyon saf olmalıdır - aynı girdiyi alırsa her zaman aynı çıktıyı vermelidir ve herhangi bir yan etkiye sahip olmamalıdır - programın bir değeri geri vermekten başka bir eylem gerçekleştiren parçaları. Referanssal şeffaflığın tersi referanssal opaklıktır.

Matematikte tüm fonksiyonlar referans olarak şeffaftır, çünkü matematiksel bir fonksiyon sadece değer alabilir ve bir değer verebilir. Programlamada bu her zaman doğru değildir; bir fonksiyon yılın hangi günü olduğunu da bulabilir ya da ekrana bir mesaj yazdırabilir. Bu farktan dolayı, bazı insanlar programlamada fonksiyonlar için prosedürler gibi başka isimler kullanırlar.

Referans şeffaflığı, programcıların ve derleyicilerin kodu bir yeniden yazma sistemi olarak düşünmelerini sağlar - bir ifadeyi alan ve başka bir şeyle değiştiren bir şey. Bu, aşağıdaki gibi çeşitli görevlerde yardımcı olabilir:

  • Programın veya kodun doğru olduğunu, yani ne olursa olsun tam olarak yapması gerekeni yaptığını kanıtlamak.
  • Bir algoritmayı daha basit hale getirmek.
  • Kodun olması gerekeni yaptığından emin olurken kodu değiştirmeyi kolaylaştırmak.
  • Kodun daha hızlı veya daha az bellek kullanacak şekilde çalıştırılması.

Son görevi yerine getirmenin çeşitli yolları vardır - en bilinenleri memoization (ilk seferden sonra cevapları kaydetme), ortak alt ifade eleme (kodun aynı olan iki parçasını birleştirmeye değip değmeyeceğini anlama) , tembel değerlendirme (kod gerçekten ihtiyaç duyana kadar cevabı bulmama) ve paralelleştirmedir (aynı anda birden fazla problem üzerinde çalışma).