Recentemente, aprendi F # por diversão (sou um VB.NET/C# dev) e gosto muito do que ele tem a oferecer. Teoricamente é isso. Mas estou tendo problemas para pensar em cenários em que optaria por codificar em F # em vez de em C #. Alguma ideia?
programming-languages
functional-programming
f#
Sistema caiu
fonte
fonte
F#
não é totalmente representativo da programação funcional. Tente emClojure
vez disso.Respostas:
Alguns argumentos para pura programação funcional:
Para obter um tratamento completo, consulte Por que a programação funcional é importante e Por que a programação funcional é importante .
fonte
A partir daqui :
Servidores assíncronos
Metaprogramação (por exemplo, análise)
Computação técnica
Aplicações GUI
Programação lógica
Teste
atuação
inline
para abstração de ordem superior gratuita.fonte
A seguir, para que usar a programação de estilo funcional - diariamente, mais ou menos.
Fazemos muitas coisas estatísticas e atuariais com conjuntos de dados razoavelmente grandes. Os dados buscados no banco de dados são - essencialmente objetos estáticos e imutáveis. Não há razão para criar uma classe com métodos.
Cada estágio do cálculo adiciona alguns detalhes adicionais, mas não modifica essencialmente o objeto. No "final" do pipeline, estamos realmente fazendo uma redução sofisticada para calcular somas, contagens e outras coisas.
Imagina isto.
Cada "fase" do cálculo é um loop de programação funcional que executa simples leitura-cálculo-rendimento e cria um objeto composto de outras coisas, mais resultados.
(Usamos Python, daí a programação funcional usando funções de gerador.)
É mais fácil usar objetos imutáveis e sem estado.
fonte
criteria() |> some_query |> calculate |> enrich |> summarize
Acho que o operador do tubo de avanço pode levar a um código mais claro, mas discordo.map
para obter o mesmo efeito.Tecnicamente, não é uma propriedade exclusiva de uma programação funcional, e o F # não é uma linguagem funcional pura. O F #, como um dos descendentes de ML, fornece uma excelente correspondência de padrões e tipos de dados algébricos. Portanto, para qualquer tarefa que exija estruturas de dados complexas, o F # é muito mais expressivo e fácil de usar que o C #.
Imagine implementar um compilador em C # e F # - representando uma árvore de sintaxe abstrata e transformá-la sobre ela é muito mais simples se sua linguagem fornecer ADTs e uma correspondência de padrões.
fonte
Ideal para o tipo de redução de mapa de paralelismo multissistema maciço e multinúcleo maciço. Muito legal, considerando que atualmente os servidores de nível básico vêm com 48 núcleos (96 com HT).
fonte
Se você quiser experimentar Haskell totalmente funcional, Erlang também tem coisas muito legais sobre isso.
Simon Payton-Jones disse sobre Haskell, ele quer ter um programa que obviamente não tem bugs, em vez de não ter bugs óbvios.
(Eu provavelmente tirei a citação um pouco, mas você entendeu)
Ao restringir os efeitos colaterais, você torna muito mais fácil provar que seu código está correto.
fonte
Uma vantagem definitiva é que é muito mais facilmente paralelizado.
fonte