Innehållsförteckning:
Definition - Vad betyder referensöppenhet?
Referenstransparens är en egenskap hos en specifik del av ett program eller ett programmeringsspråk, särskilt funktionella programmeringsspråk som Haskell och R. Ett uttryck i ett program sägs vara referensiellt transparent om det kan ersättas med dess värde och det resulterande beteendet är samma sak som före förändringen. Detta innebär att programmets beteende inte ändras oavsett om den ingång som används är en referens eller ett verkligt värde som referensen pekar på.
Techopedia förklarar referensöppenhet
Referensöppenhet har sina rötter i analytisk filosofi, som är en gren av filosofi som studerar naturliga språkkonstruktioner, argument och uttalanden baserade på metoderna för matematik och logik och har lite att göra med programmering, även om det har antagits av datavetare.
Konceptet är enkelt, "referenten", det som ett uttryck refererar till, kan användas för att ersätta "refereren" utan att ändra betydelsen av uttrycket. Till exempel säger uttalandet "Luke's far är en ond man", "Luke's far" "Darth Vader" i Star Wars lore. Så uttalandet är referensellt transparent eftersom "Luke's far" kan ersättas när som helst med "Darth Vader" och uttalandet skulle inte förändras i betydelsen. Men i uttalandet "publiken visste inte förrän 'The Empire Strikes Back' att Lukas far faktiskt är Darth Vader" är inte ett referensellt transparent uttryck, eftersom om "Luke's far" ersätts med "Darth Vader" blir uttrycket "the publiken visste inte förrän "The Empire Strikes Back" att Darth Vader faktiskt är Darth Vader, "som har en helt annan betydelse.
När det gäller programmering är konceptet vid första anblicken detsamma, men många filosofer håller inte med om att konceptet implementeras eller överförs väl i programmeringsspråk. Men i generell programmering betyder detta helt enkelt att ett uttryck kan ersättas av dess resulterande värde utan att påverka programmets beteende. Exempelvis lägger funktionen plusOne (x) till en helt enkelt till vad värdet på x är, så om vi vet att x = 5 så kan vi säkert ersätta funktionen med värdet 6 i ett uttryck som ger samma beteende när vi använder plusOne (x). Men om det finns en extern variabel i uttrycket som styrs externt, säg i funktionen plusY (x) där Y inom funktionen styrs externt, kan det resulterande beteendet kanske inte vara detsamma - i det här fallet är detta inte en referensellt transparent uttryck.
