V programovacích jazycích je čistá funkce funkce , která:
K tomu, aby funkce byla čistá, nestačí mít pouze jednu z vlastností.
Nedeterminismus funkce je schopnost funkce vracet různé hodnoty navzdory skutečnosti, že jsou jí předány stejné hodnoty vstupních argumentů jako vstup. V tomto případě není možné sestavit jednoznačnou tabulku hodnot funkcí; pro takové funkce vypadají tabulky hodnot jako seznam (možná nekonečný) možných hodnot, které funkce nabývá na dané sadě vstupních parametrů.
Funkce je deterministická, pokud vrací stejný výsledek pro stejnou sadu vstupních hodnot.
V imperativních jazycích mohou některé funkce v procesu provádění svých výpočtů upravovat hodnoty globálních proměnných, provádět I/O operace, reagovat na výjimečné situace voláním svých handlerů. Takové funkce se nazývají funkce s vedlejšími účinky . Dalším typem vedlejších efektů je úprava parametrů (proměnných) předávaných funkci, kdy se v procesu výpočtu výstupní hodnoty funkce mění i hodnota vstupního parametru.
Téměř každý programovací jazyk umožňuje popisovat funkce bez vedlejších účinků. Některé jazyky však podporují nebo dokonce vyžadují určité druhy funkcí pro použití vedlejších účinků. Například v mnoha objektově orientovaných jazycích je funkci člena třídy předán skrytý parametr - ukazatel na instanci třídy, jejímž jménem je volána odpovídající funkce (například v C ++ se tento parametr nazývá toto , a v Object Pascal - self ), které tato funkce implicitně upravuje. V C++ však můžete zadat modifikátor const na metodě třídy , čímž sdělíte kompilátoru, že metoda nemodifikuje data třídy.
Obvykle funkce, které mají vedlejší účinky, nejsou deterministické, takže funkce bez vedlejších účinků, deterministické funkce a čisté funkce jsou někdy zaměňovány. Ve skutečnosti se jedná o různé vlastnosti funkcí. Například funkce rand , která vrací náhodné číslo, nebo hypotetická funkce GetGlobalVarX , která vrací hodnotu globální proměnné X (a nic jiného nedělá), nejsou deterministické, i když nemají vedlejší účinky. Ale hypotetická funkce print , která zobrazuje text na obrazovce a vždy vrací 0, je naopak deterministická, ale má vedlejší efekt (tisk textu na obrazovku). Žádný z nich není čistý.