Funkcja Curry w JavaScript

weź naczynie, dodaj trochę wody, dodaj kilka linii kodu, dodaj liście curry i masala (według twojego gustu), gotuj na małym ogniu przez 25 minut, a oto funkcja curring, gotowa do podania w produkcji . Żartuję chłopcy i gole.
Cześć, twórcy JS. Powracam z gorącym tematem „Function Currying”
Ta historia obejmuje:
- co to jest curry, jak działa i dlaczego jest używane.
Historia zaczyna się tutaj
Co to jest funkcja curry?
curry to przekształcenie funkcji, która przyjmuje wiele argumentów [przykład: nazwa_funkcji(a, b,c)] na kilka funkcji, które przyjmują jeden argument w sekwencji.
dobrze, dobrze.., wiem, że to brzmi con-fu-jing (mylące), moje reakcje były takie same, kiedy przeczytałem to po raz pierwszy.
ok, zrozummy to łatwo, funkcja (doSum), która pobiera wszystkie argumenty w jednym ujęciu, tj. doSum(a, b, c) [przykład poniżej: Normalna funkcja dodawania.

Jest przekształcany w kilka funkcji (addNumbers(a), (b), (c)), które pobierają jeden argument w sekwencji.
Uwaga: Funkcjonalność (cel) obu funkcji jest taka sama, tylko zmieniono ich nazwy dla lepszego zrozumienia.

oto, jaką funkcją jest curry według maniaków dla maniaków :
Jest to technika programowania funkcyjnego, polegająca na przekształcaniu funkcji wielu argumentów w kilka funkcji jednego argumentu w sekwencji.
mówiąc prościej, funkcja zamiast przyjmować wszystkie argumenty naraz, przyjmuje pierwszy argument i zwraca funkcję, która przyjmuje drugi argument, a następnie ponownie zwraca inną funkcję, która przyjmuje trzeci argument, i tak dalej, aż wszystkie argumenty zostaną podjęte (przykład na obrazku o nazwie: funkcja curry).
Jak działa curry?
curring w javascript może być nieco trudny do zrozumienia, ponieważ jest to javascript
ale spróbujmy to ogarnąć, poniżej znajduje się przykład prostej funkcji

tutaj funkcja „doSum” dodaje podany argument i zwraca sumę wszystkich przekazanych argumentów.
poniżej znajduje się curry wersja tej samej funkcji (tylko zmieniona nazwa, dla lepszego zrozumienia)

wynik powyższej i poniższej funkcji będzie taki sam, 18
addNumbers jest ulepszoną wersją powyższej funkcji doSum, addNumber funkcja nadrzędna przyjmuje argument tj. 5 w naszym przypadku i zwraca kolejną anonimową funkcję, która przyjmuje kolejny argument tj. 6 w naszym przypadku i proces trwa do momentu przekazania wszystkich parametrów, ostatnia funkcja anonimowa zwraca wartość po przetworzeniu wszystkich danych wejściowych.
w powyższym przykładzie zaimplementowaliśmy funkcje zagnieżdżone, więc każda z funkcji przyjmuje jeden argument i zwraca inną funkcję, dopóki wszystkie argumenty nie zostaną uzupełnione.
możesz curry swoją funkcję na 2 różne sposoby, używając funkcji wiązania i zamknięć, zobaczmy, jak to wygląda
funkcja curry za pomocą funkcji wiązania
jeśli nie wiesz, czym jest funkcja wiązania, sprawdź tę moją historię .

tutaj w powyższym przykładzie używamy funkcji wiązania javascript, a za pomocą funkcji wiązania wykonujemy funkcję „onBoardUser”.
basicCompanyDetails jest podobny dla wszystkich zarejestrowanych użytkowników, więc chcemy, aby szczegóły były domyślnie dostępne dla wszystkich zarejestrowanych użytkowników, tutaj przekazujemy argument „basicCompanyDetails” do funkcji bind i tworzymy instancję „onBoardUser”, tutaj funkcja bind zwraca funkcję, którą możesz zapisać w jakimś miejscu w pamięci i wykonać później, tutaj przechowujemy funkcję w addUser i wywołujemy dla wszystkich użytkowników.
w ten sposób możesz zaprogramować swoją funkcję za pomocą funkcji wiązania w javascript. więcej przykładów na poniższym obrazku.

możesz również przekazać oba parametry podczas wywoływania metody addUserToSales, która wyświetli te same wyniki.
curry funkcji za pomocą domknięć.
zamknięcia są bardzo powszechną, ale trudną koncepcją w javascript, ale nie dyskutowano zbyt wiele, możesz przeczytać tutaj, czym są zamknięcia .
spróbujmy zaimplementować funkcję curry przy użyciu domknięć.

w powyższym przykładzie stworzyliśmy funkcję „onBoardUser”, która przyjmuje jeden argument i zwraca inną anonimową funkcję, która przyjmuje inny argument, podsumowuje szczegóły i zwraca.
wywołujemy funkcję „onBoardUser” z jednym argumentem tj . accountDepartmentDetails i zapisujemy ją w zmiennej (pamiętajmy, że onBoardUser zwraca funkcję), więc zapisujemy funkcję w zmiennej addUsertoAccounts i teraz zmienna ma funkcję, którą można wywołać w dowolnym momencie za pomocą argument, o który prosi, więc wywołaliśmy anonimową funkcję (zwróconą przez onBoardUser) przechowywaną w addUsertoAccounts z argumentem (szczegóły użytkownika, tj. detailsOfJohn).
po wywołaniu funkcja zakończyła wykonywanie znajdującej się w niej instrukcji i wydrukowała dane wyjściowe.

gdyby funkcje zostały wywołane również po około 10 000 wierszy kodu, wydrukowałoby to samo wyjście, ponieważ jest to zamknięcie i pamięta jego zakres leksykalny.
Utwardzanie za pomocą ES6:

w ten sposób możesz używać funkcji curry z domknięciami w JS.
mimo to możesz mieć jedno pytanie w głowie: Jeśli możemy przekazać wiele argumentów do funkcji, to dlaczego w ogóle potrzebujemy curry?
to prawdopodobnie odpowie na te wątpliwości.
dlaczego jest używany
Dlaczego? Dlaczego? Dlaczego?
- curry to technika, która dzieli funkcje na mniejsze funkcje, każda pojedyncza funkcja ma swoją własną pracę, dzięki czemu twoja funkcja jest czysta i mniej podatna na błędy i skutki uboczne.
- przykład: pierwsza funkcja weryfikuje dane użytkownika, druga weryfikuje dane firmy itp.
- jest używany w programowaniu funkcjonalnym do korzystania z funkcji wyższego rzędu
- pomaga utrzymać porządek i porządek w kodzie.
- możesz także użyć curry jako mechanizmu, który pomaga sprawdzić, czy masz wszystko, zanim przejdziesz dalej
- przykład: każda zagnieżdżona funkcja nie zostanie wykonana, jeśli nie otrzyma wymaganych argumentów.