Recientemente he estado aprendiendo F # por diversión (soy un desarrollador de VB.NET/C#), y realmente me gusta algo de lo que tiene para ofrecer. Teóricamente eso es. Pero tengo problemas para pensar en escenarios en los que elegiría codificar en F # en lugar de en C #. ¿Algunas ideas?
programming-languages
functional-programming
f#
Se cayó el sistema
fuente
fuente
F#
No es totalmente representativo de la programación funcional. Intenta en suClojure
lugar.Respuestas:
Algunos argumentos para la programación funcional pura:
Para un tratamiento completo, vea Por qué es importante la programación funcional y Por qué es importante la programación funcional .
fuente
Desde aquí :
Servidores asincrónicos
Metaprogramación (por ejemplo, análisis)
Informática técnica
Aplicaciones GUI
Programación lógica
Pruebas
Actuación
inline
para abstracción de orden superior sin costo.fuente
Esto es para lo que utiliza la programación de estilo funcional, más o menos a diario.
Hacemos muchas cosas estadísticas y actuariales con conjuntos de datos bastante grandes. Los datos que se obtienen de la base de datos son esencialmente objetos estáticos e inmutables. No hay razón para crear una clase con métodos.
Cada etapa del cálculo agrega algunos detalles adicionales, pero esencialmente no muta el objeto. Al "final" de la tubería, realmente estamos haciendo una reducción elegante para calcular sumas, recuentos y otras cosas.
Imagina esto.
Cada "fase" del cálculo es un bucle de programación funcional que realiza una simple lectura-cálculo-rendimiento y crea un objeto compuesto de otras cosas más resultados.
(Usamos Python, de ahí la programación funcional usando las funciones del generador).
Es más fácil usar objetos sin estado e inmutables.
fuente
criteria() |> some_query |> calculate |> enrich |> summarize
Encuentro que el operador de la tubería de avance puede conducir a un código más claro, pero estoy divagando.map
para obtener el mismo efecto.Técnicamente, no es una propiedad única de una programación funcional, y F # no es un lenguaje funcional puro. F #, como uno de los descendientes de ML, proporciona una excelente coincidencia de patrones y tipos de datos algebraicos. Entonces, para cualquier tarea que requiera estructuras de datos complejas, F # es mucho más expresivo y fácil de usar que C #.
Imagine implementar un compilador en C # y F #: representar un árbol de sintaxis abstracta y transformarlo es mucho más simple si su lenguaje proporciona ADT y una coincidencia de patrones.
fuente
Ideal para el tipo de mapa reducido de multisistema masivo y paralelismo masivo multinúcleo. Bastante bueno, considerando que hoy en día los servidores de nivel de entrada vienen con 48 núcleos (96 contando HT).
fuente
Si quieres un funcionamiento completo, prueba Haskell, Erlang también tiene algunas cosas geniales al respecto.
Simon Payton-Jones dijo sobre Haskell, que quiere tener un programa que obviamente no tenga errores, en lugar de no tener errores obvios.
(Probablemente obtuve un poco la cita, pero entiendes la idea)
Al limitar los efectos secundarios, es mucho más fácil demostrar que su código es correcto.
fuente
Una ventaja definitiva es que es mucho más fácil de paralelizar.
fuente