¿Alguien tiene un buen modelo mental o metáfora para la programación funcional que hace referencia a algo en el mundo real?
La programación orientada a objetos intuitivamente tiene sentido para mí. Hay cosas que tienen propiedades y, a veces, también pueden hacer cosas o realizar cálculos sobre sus propiedades (métodos). (Ej: Coche, Forma, Gato).
Llevo la programación funcional de ninguna manera y no estoy interesado en un debate sobre las virtudes de los dos. Solo necesito una metáfora o un modelo mental para trabajar como lo he hecho con la programación orientada a objetos.
¿Cuáles son algunos buenos modelos mentales o metáforas del mundo real para programar en un paradigma funcional? Hay algo acerca de las funciones compuestas de funciones que procesan funciones que lo deja a uno sin un lugar firme para pararse y meditar.
fuente
Respuestas:
La programación funcional se trata de pegar funciones más pequeñas para lograr sus resultados. Un modelo mental decente (para mí, al menos) es una línea de montaje. Cada función que se compone es un paso más en el proceso de ensamblaje. Considere esta función aquí:
En Haskell, esta función devolverá el elemento más pequeño de una lista. La línea de ensamblaje primero ordena la entrada, luego devuelve el primer elemento (suponiendo que esté ordenado de menor a mayor). Si solo quisiéramos obtener el valor par más pequeño, entonces podemos cambiar la línea de ensamblaje para que tenga el siguiente aspecto:
Es solo un paso más en la cinta transportadora.
En pocas palabras, las funciones solo describen los pasos tomados para convertir la entrada sin procesar (las partes) en el bien procesado (la salida).
fuente
(f . g) (x)
significaf(g(x))
of . g
significa\x -> f (g (x))
..
es como se define; Así no es como funciona Haskell en general . También podría definir el operador de canalización directa de F # (|>
) en Haskell y escribirsmallest x = (sort x) |> head
y los datos fluirían correctamente. Solo pensé en señalarlo.Matemáticas. La programación funcional está inspirada y modelada en las matemáticas. Las funciones matemáticas no tienen estado, no tienen efectos secundarios, etc., y lo mismo ocurre con FP. Si piensa en FP en términos de funciones matemáticas en lugar de utilizar un enfoque de "cómo le hago esto a ese" estilo OO, estará en buena forma. Sin embargo, si intentas llevar la sensibilidad OO a FP, estarás nadando contra la corriente.
fuente
¿Qué tal un libro animado ?
En un libro animado cada página representa el mundo tal como existe en un momento en el tiempo. En nuestro programa, el mundo se representa como una estructura de datos compuesta (por ejemplo, tenemos un plátano que está en la mano de un gorila que está en un árbol que está en una jungla). Cada página posterior avanza la historia modificando ligeramente la representación anterior. En FP, las estructuras de datos persistentes se diseñaron para reutilizar eficientemente las estructuras anteriores de modo que un cambio proporcione solo una representación delta y no completamente nueva.
Lo que puede no ser obvio es que una página en nuestro libro también representaría intangibles. Por ejemplo, si el gorila deja caer el plátano, podríamos comenzar a aplicar los efectos de la gravedad en su decente y aceleración hacia el suelo de la jungla. Para acomodar esto, le atribuiríamos atributos como la velocidad y la trayectoria a nuestro plátano.
En nuestro programa, habría una función que acepta una página de libro animado (también conocido como el estado del mundo) como argumento y genera una nueva página . De esta manera, nuestra historia se cuenta sin cambiar realmente el estado de los objetos existentes. Simplemente reemplazamos cada página con una nueva usando lo que efectivamente es un cálculo.
fuente
Relaciones
Amigo: Dadas dos personas, una relación de amigo sigue estas leyes generales
Monoide: dados múltiples elementos y una función que toma 2 de los elementos y devuelve 1, una relación monoidal sigue estas leyes generales
La programación funcional tiene que ver con generalizaciones, amigo es una relación muy general que se puede ver en numerosos escenarios, pero en todos los diversos formatos generalmente sigue las leyes anteriores.
Al reconocer las leyes que rigen las relaciones entre las cosas, puede crear implementaciones generales que funcionen en cualquier formato de cosas que tengan ese tipo de relación. En la programación funcional, intenta identificar las relaciones entre las cosas para que puedan clasificarse y tratarse en general.
¿Quieres una metáfora del mundo real? Observe cómo se relacionan las cosas e intente identificar las leyes generales (como en el caso de múltiples escenarios en los que pueden variar otras cosas además de las leyes). Existe una relación entre un empleado de registro y un comprador en una tienda, tiene algunas leyes generales, el software ha sido desarrollado para facilitar los objetivos de las personas en esa relación general en la forma de los sistemas POS. Del mismo modo, cuando comienza a ver estas leyes generales que dictan cómo se relacionan las cosas, puede comenzar a confiar en las leyes de esas relaciones al escribir su software en lugar de los detalles específicos de una instancia de una relación.
fuente
Todo es un valor, y aplica funciones a los valores (que pueden ser funciones) para producir nuevos valores, preferiblemente sin producir efectos secundarios.
fuente
La cosa clave a tener en cuenta sobre la programación funcional es que todo es un valor, incluso el código en sí mismo es 'valores'.
El mejor ejemplo de un entorno de programación funcional simple es la herramienta de negocios favorita de todos: la hoja de cálculo. Cada celda de la hoja de cálculo son datos o el resultado de una función. Además, esta función no puede activarse y modificar otra celda.
Cuando uno se mueve a un lenguaje funcional, en lugar de una cuadrícula cartesiana de
A1
yB42
, las funciones tienen nombres. Eso es todo lo que realmente es.Hay otros aspectos que se pueden agregar más allá de esto ... pero esa es la programación funcional en su núcleo. No hay que preocuparse por la estructura de las listas o la agrupación de cosas. La programación funcional se trata de pasar un valor a una función y recuperar un valor sin tener que molestar en ningún otro lugar de la memoria.
Eso es. La programación funcional es una hoja de cálculo con nombres en lugar de una cuadrícula.
fuente
Puedes pensar en la programación funcional como en comportamientos . Un programa es una descripción del comportamiento que desea que la computadora promulgue. Las funciones son la unidad básica de comportamiento, y la composición de funciones es una forma de construir comportamientos más grandes a partir de los más pequeños.
En OOP, un objeto de código está destinado a ser el estado de un objeto en el dominio del problema; cambia con el tiempo para reflejar los cambios en ese objeto de dominio. En FP, un valor representa el estado de un objeto de dominio; nunca cambia, simplemente crea diferentes valores para representar diferentes estados.
Encuentro que el modelo funcional es un poco más honesto sobre lo que las computadoras realmente están haciendo: representar. Después de todo, no puedo simplemente evocar un
new Tesla()
aire de la nada. :)fuente
Las oraciones son más funcionales que orientadas a objetos, suponiendo que las descomponga más o menos de la siguiente manera ...
Entonces necesitamos encontrar las frases principales y luego el resto:
En una ida:
Árbol de Parse:
La parsimonia infecta el pensamiento funcional;
Me quito el sombrero ante Gottlieb Frege 1890, Alan Turing (entschiedungsprobleme) 1930, Noam Chomsky (1960).
fuente