Ohjelmointikielissä puhdas funktio on funktio , joka:
Vain yksi ominaisuus ei riitä, jotta funktio olisi puhdas.
Funktion epädeterminismi on funktion kyky palauttaa erilaisia arvoja huolimatta siitä, että samat syöttöargumenttien arvot välitetään sille syötteenä. Tässä tapauksessa ei ole mahdollista muodostaa yksiselitteistä funktioarvojen taulukkoa; tällaisille funktioille arvotaulukot näyttävät luettelolta (ehkä äärettömältä) mahdollisista arvoista, jotka funktio ottaa tietyn syöttöparametrijoukon.
Funktio on deterministinen, jos se palauttaa saman tuloksen samalle syöttöarvojoukolle.
Pakollisilla kielillä jotkin funktiot suorittaessaan laskelmia voivat muokata globaalien muuttujien arvoja, suorittaa I/O-operaatioita, vastata poikkeuksellisiin tilanteisiin kutsumalla käsittelijöitään. Tällaisia toimintoja kutsutaan sivuvaikutteisiksi funktioiksi . Toinen sivuvaikutusten tyyppi on funktiolle välitettävien parametrien (muuttujien) muuttaminen, kun myös syöteparametrin arvo muuttuu funktion lähtöarvon laskentaprosessissa.
Lähes millä tahansa ohjelmointikielellä voit kuvata toimintoja ilman sivuvaikutuksia. Jotkut kielet kuitenkin rohkaisevat tai jopa vaativat tietynlaisia toimintoja käyttääkseen sivuvaikutuksia. Esimerkiksi monissa oliokielissä piilotettu parametri välitetään luokan jäsenfunktiolle - osoitin luokkainstanssiin, jonka puolesta vastaava funktio kutsutaan (esimerkiksi C ++ :ssa tätä parametria kutsutaan nimellä tämä , ja Object Pascal - self ), jota tämä funktio implisiittisesti muokkaa. C++ : ssa voit kuitenkin määrittää const -muuntimen luokkametodille ja kertoa siten kääntäjälle, että menetelmä ei muuta luokkatietoja.
Yleensä funktiot, joilla on sivuvaikutuksia, eivät ole deterministisiä, joten funktiot ilman sivuvaikutuksia, deterministiset funktiot ja puhtaat funktiot sekoitetaan joskus. Itse asiassa nämä ovat funktioiden eri ominaisuuksia. Esimerkiksi rand - funktio , joka palauttaa satunnaisluvun, tai hypoteettinen GetGlobalVarX- funktio , joka palauttaa globaalin muuttujan X arvon (eikä tee mitään muuta), eivät ole deterministisiä, vaikka niillä ei ole sivuvaikutuksia. Mutta hypoteettinen funktio print , joka näyttää tekstiä näytöllä ja palauttaa aina 0:n, päinvastoin, on deterministinen, mutta sillä on sivuvaikutus (tekstin tulostaminen näytölle). Yksikään niistä ei ole puhdasta.