Η αναφορική διαφάνεια είναι ένα χαρακτηριστικό των τμημάτων των προγραμμάτων υπολογιστών. Ένα μέρος ενός προγράμματος ονομάζεται "αναφορικά διαφανές" εάν μπορεί να αντικατασταθεί με την τιμή που επιστρέφει χωρίς να αλλάξει η συμπεριφορά του προγράμματος. Μια αναφορικά διαφανής συνάρτηση πρέπει να είναι καθαρή-πρέπει να δίνει πάντα την ίδια έξοδο αν δέχεται την ίδια είσοδο, και δεν πρέπει να έχει παρενέργειες-μέρη του προγράμματος που εκτελούν κάποια άλλη ενέργεια εκτός από το να επιστρέφουν μια τιμή. Το αντίθετο της αναφορικής διαφάνειας είναι η αναφορική αδιαφάνεια.

Στα μαθηματικά, όλες οι συναρτήσεις είναι αναφορικά διαφανείς, επειδή μια μαθηματική συνάρτηση μπορεί μόνο να λαμβάνει τιμές και να δίνει μια τιμή. Στον προγραμματισμό, αυτό δεν ισχύει πάντα - μια συνάρτηση μπορεί επίσης να ανακαλύψει ποια μέρα του έτους είναι, ή να εκτυπώσει ένα μήνυμα στην οθόνη. Λόγω αυτής της διαφοράς, ορισμένοι χρησιμοποιούν άλλα ονόματα για τις συναρτήσεις στον προγραμματισμό, όπως διαδικασίες.

Η αναφορική διαφάνεια επιτρέπει στους προγραμματιστές και τους μεταγλωττιστές να σκέφτονται τον κώδικα ως ένα σύστημα επανεγγραφής - κάτι που παίρνει μια έκφραση και την αντικαθιστά με κάτι άλλο. Αυτό μπορεί να βοηθήσει σε διάφορες εργασίες, όπως:

  • Η απόδειξη ότι το πρόγραμμα ή ο κώδικας είναι σωστός - ότι κάνει ακριβώς αυτό που υποτίθεται ότι πρέπει, ό,τι κι αν συμβεί.
  • Κάνοντας έναν αλγόριθμο πιο απλό.
  • Διευκολύνοντας την αλλαγή του κώδικα, ενώ παράλληλα είναι σίγουρο ότι κάνει αυτό που πρέπει.
  • Κάνοντας τον κώδικα να εκτελείται γρηγορότερα ή με τρόπο που να χρησιμοποιεί λιγότερη μνήμη.

Υπάρχουν διάφοροι τρόποι για την εκτέλεση της τελευταίας εργασίας - οι πιο γνωστοί είναι η απομνημόνευση (αποθήκευση των απαντήσεων μετά την πρώτη φορά), η εξάλειψη κοινών υποεκφράσεων (υπολογισμός του αν αξίζει τον κόπο να συνδυάσετε δύο τμήματα του κώδικα που είναι ίδια), η τεμπέλικη αξιολόγηση (μη εύρεση της απάντησης μέχρι ο κώδικας να τη χρειαστεί πραγματικά) και η παραλληλοποίηση (εργασία σε πολλαπλά προβλήματα ταυτόχρονα).