Chet Corcos napisał(a):
Mathematicians like to describe programs as transformations of data which leads to the first concept — pure functions. Pure functions are functions without side-effects. Pure functions depend only on the inputs of the function, and the output should be the exact same for the same input.
Map, filter, reduce lub nawet głupie $().on(...)
- w tych wszystkich przypadkach niejednokrotnie zdarzyło mi się korzystać ze zmiennych z zewnętrznego scope'a. Zwłaszcza przy dodawaniu listenerów, bo to na nich bardzo często jest tłumaczone jak działają domknięcia. Dopiero od jakiegoś czasu zacząłem mocno zwracać uwagę na to, czy moje funkcje faktycznie operują na tylko na parametrach do nich przekazywanych.
Czy jeżeli wyżej wymienionych przypadkach potrzebuję zmiennej z zewnętrznego scope'a to powinna mi się zapalić czerwona lampka i powinienem jeszcze raz przemyśleć to, jak napisałem dany fragment kodu?
A może HOF to the rescue?
const outerVariable = 1;
const data1 = [];
const data2 = data1.reduce((next, current) => {
return current + outerVariable;
}, {});
// czy tak, jak by nie patrzeć też closure, ale...
const fn = variable => (next, current) => {
return current + variable;
}
const outerVariable = 1;
const data1 = [];
const data2 = data1.reduce(fn(outerVariable), {});
Wołam @LukeJL @mr_jaro @Maciej Cąderek - zwłaszcza Twoje zdanie mnie interesuje, bo zdaje się, że kiedyś już mi zwróciłeś na to uwagę, a chciałbym się poprawić.