2017-08-14 66 views
5

Artykuł czytałem daje to jako przykład zanieczyszczonego funkcji (w JavaScript):Czy czysta funkcja zależy od stałej zewnętrznej?

const tipPercentage = 0.15; 

const calculateTip = cost => cost * tipPercentage; 

To uderzyło mnie jak trochę dziwny przykład, ponieważ tipPercentage jest stałą o wartości niezmienne. Typowe przykłady czystych funkcji pozwalają na zależność od niezmiennych stałych, gdy te stałe są funkcjami.

const mul = (x, y) => x * y 

const calculateTip = (cost, tipPercentage) => mul(cost, tipPercentage); 

W powyższym przykładzie, poprawcie mnie jeśli się mylę, calculateTip zazwyczaj zostać zakwalifikowane jako czystej funkcji.

Moje pytanie brzmi: czy w programowaniu funkcjonalnym funkcja jest nadal uważana za czystą, jeśli opiera się na zdefiniowanej zewnętrznie stałej o niezmiennej wartości, gdy ta wartość nie jest funkcją?

+0

Jest to - w haskell każda inna funkcja, która "przyjmuje więcej niż 2 argumenty", opiera się na przechwyconych zmiennych z "zewnętrznego zakresu". – zerkms

+0

Tak, oczywiście. W zależności od niezmiennych funkcji jest to tylko szczególny przypadek zależny od niezmiennych wartości. – Bergi

+0

Gdyby nie były czyste, matematyka byłaby zepsuta. – molbdnilo

Odpowiedz

4

Tak, jest to funkcja czysta. Czyste funkcje są referentially transparent, tj. Można zastąpić wywołanie funkcji jego wynikiem bez zmiany zachowania programu.

W twoim przykładzie zawsze można wymienić np. calculateTip (100) w dowolnym miejscu programu z wynikiem 15 bez żadnych zmian w zachowaniu, dlatego funkcja jest czysta.