co je čistá funkce?
výhody
používání čistých funkcí má několik výhod, a to jak z hlediska výkonu, tak použitelnosti.
čitelnost
čisté funkce jsou mnohem snazší číst a důvod. Všechny relevantní vstupy a závislosti jsou poskytovány jako parametry, takže nejsou pozorovány žádné efekty, které mění proměnné mimo sadu vstupů.
to znamená, že můžeme rychle pochopit funkci a její závislosti pouhým přečtením deklarace funkce. Takže, pokud je funkce deklarovaná jako f(a, b, c)
pak víme, že pouze a
b
c
jsou závislostí f
.
Přenositelnost
stejně Jako všechny závislosti jsou poskytovány jako vstupní parametry a nejsou přístupné prostřednictvím globální souvislosti, tyto závislosti mohou být vyměněny v závislosti na kontextu, ve kterém je volána funkce.
to znamená, že stejná funkce může fungovat například na různých implementacích stejného zdroje.
Toto je kód mnohem více přenosné a opakovaně použitelné jako stejná funkce může být použit v různých kontextech, spíše než museli napsat jinou funkci jen použít různé implementace stejné třídy.
například, místo toho, aby musel psát dva různé nečisté funkce použít dva různé záznamníky, které jsou uloženy na celém světě, čisté funkce by jen vzít v požadované logger jako vstupní.
testování
nedostatek vedlejších účinků usnadňuje testování čistých funkcí, protože musíme pouze otestovat, zda vstupy produkují požadované výstupy. V našich testech specifických funkcí nemusíme kontrolovat platnost žádného globálního programového stavu.
kromě toho, protože všechny závislosti jsou poskytovány jako vstupy, můžeme snadno zesměšňovat závislosti. V nečistém prostředí bychom museli sledovat stav nějaké globální závislosti během všech testů.
v čistém prostředí bychom však jednoduše poskytli všechny závislosti jako vstup. Už se nemusíme starat o udržení globálního stavu během našich testů a nyní můžeme potenciálně poskytovat různé verze závislostí na různých testech.
to nám umožňuje testovat funkce a zároveň explicitně mít kontrolu nad poskytovanými závislostmi v každém testu.
referenční průhlednost
referenční průhlednost označuje schopnost nahradit volání funkce odpovídající výstupní hodnotou bez změny chování programu.
pro dosažení referenční průhlednosti musí být funkce čistá. To má výhody z hlediska čitelnosti a rychlosti. Kompilátory jsou často schopni optimalizovat kód, který vykazuje referenční průhlednost.
Caching
protože čisté funkce vždy vracejí stejný výstup pro stejný vstup, můžeme výsledky volání čisté funkce do mezipaměti.
Caching označuje použití techniky, jako je memoizace, k ukládání výsledků funkcí, takže je musíme vypočítat pouze jednou.
obvykle se pro funkci f: Input -> Output
to provádí pomocí mapy (například hash-map) z Input -> Output
.
při provádění funkce nejprve zkontrolujeme, zda mapa obsahuje vstup jako klíč. Pokud ano, vrátíme výstupní hodnotu mapy, jinak vypočítáme f(input)
a poté výstup uložíme do mapy před jeho vrácením.