Piggy-backing fora do exemplo LennyProgrammers ...
Uma das coisas que os outros exemplos perderam é que você pode usar funções de ordem superior junto com o aplicativo de função parcial (PFA) para vincular (ou "injetar") dependências em uma função (por meio de sua lista de argumentos) para criar uma nova função.
Se em vez de:
doThisWith(Foo, anotherFunction)
nós (para ser convencional na maneira como o PFA geralmente é feito) temos a função de trabalhador de baixo nível como (trocando a ordem do argumento):
doThisWith( anotherFunction, Foo )
Em seguida, podemos aplicar parcialmente o doThisWith da seguinte forma:
doThis = doThisWith( anotherFunction ) // note that "Foo" is still missing, argument list is partial
O que nos permite usar a nova função mais tarde:
doThis(Foo)
Ou até:
doThat = doThisWith( yetAnotherDependencyFunction )
...
doThat( Bar )
Veja também: https://ramdajs.com/docs/#partial
... e, sim, somadores / multiplicadores são exemplos sem imaginação. Um exemplo melhor seria uma função que recebe mensagens e as registra ou envia por e-mail, dependendo do que a função "consumidor" passou como dependência.
Estendendo essa idéia, listas de argumentos ainda mais longas podem ser progressivamente reduzidas a funções cada vez mais especializadas, com listas de argumentos cada vez mais curtas e, é claro, qualquer uma dessas funções pode ser passada para outras funções como dependências a serem parcialmente aplicadas.
OOP é bom se você precisar de um conjunto de coisas com várias operações estreitamente relacionadas, mas se transforma em make-work para criar um monte de classes, cada uma com um único método público "do it", como "O Reino dos Substantivos".