Piggy-backing off of LennyProgrammers example ...
Jedną z rzeczy, których pominięto w innych przykładach, jest to, że można użyć funkcji wyższego rzędu wraz z aplikacją funkcji częściowej (PFA) w celu powiązania (lub „wstrzyknięcia”) zależności do funkcji (poprzez listę argumentów) w celu utworzenia nowej funkcji.
Jeśli zamiast:
doThisWith(Foo, anotherFunction)
my (aby być konwencjonalnym w sposobie, w jaki zazwyczaj wykonuje się PFA), mamy niskopoziomową funkcję roboczą jako (zamiana porządku arg):
doThisWith( anotherFunction, Foo )
Następnie możemy częściowo zastosować doThisW ten sposób:
doThis = doThisWith( anotherFunction ) // note that "Foo" is still missing, argument list is partial
Co pozwala nam później korzystać z nowej funkcji w następujący sposób:
doThis(Foo)
Lub nawet:
doThat = doThisWith( yetAnotherDependencyFunction )
...
doThat( Bar )
Zobacz także: https://ramdajs.com/docs/#partial
... a tak, sumatory / mnożniki są niewyobrażalnymi przykładami. Lepszym przykładem może być funkcja, która pobiera wiadomości i rejestruje je lub wysyła e-mailem w zależności od tego, co przekazała funkcja „konsumenta” jako zależność.
Rozszerzając ten pomysł, jeszcze dłuższe listy argumentów można stopniowo zawęzić do coraz bardziej wyspecjalizowanych funkcji z coraz krótszymi listami argumentów, i oczywiście każdą z tych funkcji można przekazać do innych funkcji jako zależności, które należy częściowo zastosować.
OOP jest fajny, jeśli potrzebujesz pakietu rzeczy z wieloma ściśle powiązanymi operacjami, ale zamienia się on w make-work, aby stworzyć grupę klas, z których każda ma jedną publiczną metodę „zrób to”, a la „Królestwo rzeczowników”.