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?
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?
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 .
Estou tendo problemas para pensar em cenários em que eu escolheria codificar em F # em vez de em C #. Alguma ideia?
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.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.
for data in summarize( enrich( calculate( some_query( criteria() ) ) ) ):
print data
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.
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.
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.
Uma vantagem definitiva é que é muito mais facilmente paralelizado.
F#
não é totalmente representativo da programação funcional. Tente emClojure
vez disso.