Referentiell öppenhet
Referentiell öppenhet är en egenskap hos delar av datorprogram. En del av ett program kallas "referentiellt transparent" om den kan ersättas med det värde den ger tillbaka utan att programmets beteende ändras. En referentiellt transparent funktion måste vara ren - den måste alltid ge samma utdata om den tar emot samma indata, och den får inte ha några sidoeffekter - delar av programmet som utför en annan åtgärd än att ge tillbaka ett värde. Motsatsen till referentiell transparens är referentiell opacitet.
I matematik är alla funktioner referentiellt transparenta, eftersom en matematisk funktion endast kan ta emot värden och ge ut ett värde. I programmering är detta inte alltid sant - en funktion kan också ta reda på vilken dag på året det är eller skriva ut ett meddelande på skärmen. På grund av denna skillnad använder vissa människor andra namn för funktioner i programmering, till exempel procedurer.
Referentiell transparens gör att programmerare och kompilatorer kan tänka på kod som ett omskrivningssystem - något som tar ett uttryck och ersätter det med något annat. Detta kan hjälpa till med flera uppgifter, t.ex:
- Att bevisa att programmet eller koden är korrekt - att det gör exakt vad det ska, oavsett vad som händer.
- En algoritm blir enklare.
- Det gör det lättare att ändra koden och samtidigt vara säker på att den gör vad den ska.
- Att få koden att gå snabbare eller på ett sätt som använder mindre minne.
Det finns flera sätt att utföra den sista uppgiften - de mest kända är memotisering (spara svaren efter första gången), eliminering av gemensamma deluttryck (ta reda på om det är värt att kombinera två delar av koden som är likadana), lat utvärdering (inte hitta svaret förrän koden verkligen behöver det) och parallellisering (arbeta med flera problem samtidigt).
Frågor och svar
F: Vad är referentiell öppenhet?
S: Referentiell transparens är en egenskap hos delar av datorprogram där en del av programmet kan ersättas med det värde den ger tillbaka utan att programmets beteende ändras.
F: Vad är motsatsen till referentiell öppenhet?
S: Motsatsen till referentiell transparens är referentiell opacitet.
Fråga: Är alla funktioner inom matematiken referentiellt transparenta?
Svar: Ja, alla funktioner i matematik är referentiellt transparenta eftersom en matematisk funktion endast kan ta emot värden och ge ut ett värde.
Fråga: Hur hjälper referentiell öppenhet programmerare och kompilatorer?
S: Referentiell öppenhet gör det möjligt för programmerare och kompilatorer att tänka på kod som ett omskrivningssystem - något som tar ett uttryck och ersätter det med något annat. Detta hjälper till med uppgifter som att bevisa att programmet eller koden är korrekt, att göra en algoritm enklare, att göra det lättare att ändra koden samtidigt som man fortfarande är säker på att den gör vad den ska göra, och att få koden att gå snabbare eller använda mindre minne.
F: Vilka tekniker används för att få koden att gå snabbare eller använda mindre minne?
S: Några tekniker som används för att få koden att gå snabbare eller använda mindre minne är memotisering (spara svaren efter första gången), eliminering av gemensamma deluttryck (ta reda på om det är värt att kombinera två delar av koden som är likadana), lat utvärdering (inte hitta svaret förrän koden verkligen behöver det) och parallellisering (arbeta med flera problem samtidigt).
F: Finns det någon skillnad mellan funktioner i programmering jämfört med funktioner i matematik?
S: Ja, det finns en skillnad mellan funktioner i programmering jämfört med dem i matematik - I programmering kan en funktion också ta reda på vilken dag på året det är eller skriva ut ett meddelande på skärmen medan detta inte är möjligt med matematiska funktioner.