Renhed af funktion

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 31. marts 2020; checks kræver 4 redigeringer .

I programmeringssprog er en ren funktion  en funktion , der:

  1. er deterministisk ;
  2. har ingen bivirkninger .

At have kun én af egenskaberne er ikke nok til, at en funktion er ren.

Funktionsdeterminisme

Ikke-determinisme af en funktion er en funktions evne til at returnere forskellige værdier på trods af, at de samme værdier af input-argumenterne sendes til den som input. I dette tilfælde er det ikke muligt at konstruere en entydig tabel med funktionsværdier; for sådanne funktioner ser værditabellerne ud som en liste (måske uendelig) over mulige værdier, som funktionen tager på et givet sæt inputparametre.

En funktion er deterministisk, hvis den returnerer det samme resultat for det samme sæt inputværdier.

Bivirkninger af funktionen

På imperative sprog kan nogle funktioner i processen med at udføre deres beregninger ændre værdierne af globale variabler, udføre I/O-operationer, reagere på ekstraordinære situationer ved at ringe til deres behandlere. Sådanne funktioner kaldes funktioner med bivirkninger . En anden type bivirkninger er ændringen af ​​de parametre (variabler), der overføres til funktionen, når værdien af ​​inputparameteren også ændres i processen med at beregne funktionens outputværdi.

Næsten ethvert programmeringssprog giver dig mulighed for at beskrive funktioner uden bivirkninger. Men nogle sprog tilskynder eller kræver endda visse former for funktioner for at bruge bivirkninger. For eksempel, i mange objektorienterede sprog sendes en skjult parameter til en klassemedlemsfunktion - en pegepind til den klasseinstans, på vegne af hvilken den tilsvarende funktion kaldes (for eksempel i C ++ kaldes denne parameter dette , og i Object Pascal  - self ), som denne funktion implicit modificerer. I C++ kan du dog angive const -modifikatoren på en klassemetode og derved fortælle compileren, at metoden ikke ændrer klassedata.

Ortogonalitet af determinisme og bivirkninger

Normalt er funktioner, der har bivirkninger, ikke deterministiske, så funktioner uden bivirkninger, deterministiske funktioner og rene funktioner forveksles nogle gange. Faktisk er det forskellige egenskaber ved funktioner. For eksempel er rand - funktionen , som returnerer et tilfældigt tal, eller den hypotetiske GetGlobalVarX- funktion , som returnerer værdien af ​​den globale variabel X (og ikke gør andet), ikke deterministiske, selvom de ikke har bivirkninger. Men den hypotetiske funktion print , som viser tekst på skærmen og altid returnerer 0, er tværtimod deterministisk, men har en bivirkning (udskrivning af tekst til skærmen). Ingen af ​​dem er rene.

Litteratur

Links