Piggy-backing del ejemplo de LennyProgrammers ...
Una de las cosas que los otros ejemplos perdieron es que puede usar funciones de orden superior junto con la aplicación de función parcial (PFA) para unir (o "inyectar") dependencias en una función (a través de su lista de argumentos) para crear una nueva función.
Si en lugar de:
doThisWith(Foo, anotherFunction)
nosotros (para ser convencionales en la forma en que generalmente se hace PFA) tenemos la función de trabajador de bajo nivel como (intercambio de orden arg):
doThisWith( anotherFunction, Foo )
Entonces podemos aplicar parcialmente doThisWith así:
doThis = doThisWith( anotherFunction ) // note that "Foo" is still missing, argument list is partial
Lo que nos permite más tarde utilizar la nueva función de esta manera:
doThis(Foo)
O incluso:
doThat = doThisWith( yetAnotherDependencyFunction )
...
doThat( Bar )
Ver también: https://ramdajs.com/docs/#partial
... y, sí, los sumadores / multiplicadores son ejemplos poco imaginativos. Un mejor ejemplo sería una función que toma mensajes y los registra o los envía por correo electrónico dependiendo de lo que la función "consumidor" haya pasado como dependencia.
Extendiendo esta idea, las listas de argumentos aún más largas se pueden reducir progresivamente a funciones cada vez más especializadas con listas de argumentos cada vez más cortas, y, por supuesto, cualquiera de estas funciones se puede pasar a otras funciones como dependencias para aplicar parcialmente.
OOP es bueno si necesita un conjunto de cosas con múltiples operaciones estrechamente relacionadas, pero se convierte en un trabajo para hacer un montón de clases cada una con un único método público de "hazlo", a la "El Reino de los sustantivos".