Me parece que todos estos están relacionados. ¿Cuál es la diferencia?Tubería, Composición y Currying
Respuesta
La tubería se utiliza para realizar una secuencia de operaciones con algún valor (como las tuberías en Unix). La entrada a cada función es la salida de la función anterior. Obviamente, esto requiere que cada función tome una sola arg.
Composición (
<<
/>>
) es similar en que llama dos funciones en secuencia (es decir, la salida de la primera es la entrada a la segunda) pero devuelve una función en lugar de invocar inmediatamente la secuencia.Currying crea una nueva función mediante la aplicación de 1 a N -1 args a una función de N args
Así, la composición de pellejo se utilizan para crear funciones mientras que las tuberías se utiliza para invocación. La composición y el currying difieren en la forma en que crean nuevas funciones (aplicando args vs encadenamiento).
Además de lo que escribió Daniel, hay una muy estrecha correspondencia entre la tubería (los |>
y <|
operadores) y la composición de funciones (las >>
y <<
operadores).
Cuando se utiliza la tubería para pasar algunos datos a un seqence de funciones:
nums |> Seq.filter isOdd
|> Seq.map square
|> Seq.sum
..., entonces este es equivalente a pasar la entrada a una función obtenida utilizando la composición de funciones:
let composed =
Seq.filter isOdd
>> Seq.map square
>> Seq.sum
composed nums
En la práctica, esto a menudo significa que puede reemplazar la declaración de función que utiliza tuberías en el argumento con una composición de funciones (y usa el hecho de que las funciones se pueden usar como valores). Aquí hay un ejemplo:
// Explicit function declaration
foo (fun x -> x |> bar |> goo)
// Equivalent using function composition
foo (bar >> goo)
- 1. Scala, currying y la sobrecarga
- 2. javascript currying
- 3. Liskov SUSTITUCIÓN y Composición
- 4. Tubería y redirección
- 5. decorador en Python currying
- 6. F # currying efficiency?
- 7. composición del proceso y excepciones
- 8. runST y la función composición
- 9. Composición de función y tupla
- 10. Tubería popen stderr y stdout
- 11. operadores matemáticos Currying en Scala
- 12. Haskell - ¿Currying? Necesita más explicación
- 13. Por qué se currying y uncurrying no implícita en Scala
- 14. Coincidencia de patrón de mezcla y currying en OCaml
- 15. Composición, herencia y agregación en JavaScript
- 16. función de composición y el módulo funcional
- 17. Código completo 2ed, composición y delegación
- 18. Cómo escribir composición y agregación en java
- 19. implementación de composición y agregación en C#?
- 20. Tubería de entrada y salida en Java
- 21. Node.js y la tubería de un ConnectionListener
- 22. ¿Se puede usar currying con funciones lambda?
- 23. ¿Hay alguna forma de currying en C?
- 24. ¿Cuáles son las ventajas prácticas del currying?
- 25. python: heredando o composición
- 26. Currying implícito en Scheme with syntax-rules?
- 27. ¿Currying es lo mismo que sobrecargar?
- 28. Currying out of order in Haskell
- 29. F #: ¿Composición del patrón?
- 30. Composición de la función
¿Tiene algún ejemplo que necesite encontrar un enfoque apropiado? Tu pregunta es bastante amplia. – pad
Esto podría ajustarse más al sitio SO de los "programadores". –
Estoy de acuerdo con Pad - esta es una pregunta bastante abierta (las respuestas de Tomas y Daniel no se sostienen). –