Em que situações devo escolher usar uma linguagem de programação funcional em vez de uma linguagem orientada a objetos mais detalhada, como C ++, C # ou Java?
Eu entendo o que é programação funcional, o que eu realmente não entendo é para quais tipos de problemas ela é uma solução perfeita?
functional-programming
language-agnostic
Alex Baranosky
fonte
fonte
Respostas:
As linguagens funcionais são, na minha opinião, boas principalmente para duas coisas: IAs de jogos e cálculos matemáticos. É bom em IAs de jogos por causa de suas belas manipulações de lista (pelo menos em Lisp e Scheme), e para cálculos matemáticos por causa de sua sintaxe. Scheme, Lisp e Haskell têm uma sintaxe que torna os cálculos matemáticos fáceis de ler. A última coisa que preciso acrescentar é que as linguagens funcionais são linguagens realmente divertidas. Meu curso Scheme foi um dos cursos com que me diverti mais.
fonte
Eu mesmo fiz algumas pesquisas sobre isso e pensei em adicionar CONCURRENCY à lista de razões para usar uma linguagem funcional. Veja em algum ponto no futuro próximo a velocidade do processador não será capaz de aumentar usando a mesma tecnologia de CPU. A física da arquitetura não permite.
Então é aí que entra o processamento simultâneo.
Infelizmente, a maioria das linguagens OOP não pode tirar proveito de vários processadores ao mesmo tempo por causa das interdependências entre os dados.
Em linguagens de programação puramente funcionais, o computador pode executar duas (ou muitas mais) funções ao mesmo tempo, porque essas funções não alteram as informações de estado externo.
Aqui está um excelente artigo sobre programação funcional de que você pode gostar.
fonte
Um amigo meu citou um de seus professores universitários dizendo algo como o seguinte:
Minha resposta é que o FP é uma abordagem completamente viável para a programação com uma gama de aplicações tão ampla quanto OO. Como acontece com qualquer discussão sobre escolha de linguagem de programação, acho que as questões mais importantes são:
Quanto à primeira pergunta, se você está fazendo isso principalmente pelo valor do aprendizado, sugiro que olhe para Haskell , por causa da ampla variedade de materiais de suporte (livros, artigos, comunidade ativa, etc.)
Quanto à segunda pergunta, Haskell tem uma boa variedade de bibliotecas (embora algumas sejam mais maduras do que outras), mas Scala (uma linguagem OO funcional híbrida em execução na JVM) tem as vantagens de que você pode fazer uma transição mais gradual para o estilo funcional , e você tem uma gama completa de bibliotecas acessíveis por Java disponíveis para você.
fonte
Praticamente tudo que você pode fazer no PP pode ser feito no FP, e a mesma coisa ao contrário. É apenas outra maneira de codificar algo - outra perspectiva do problema e uma maneira diferente de resolvê-lo.
No entanto, como poucas pessoas usam FP, o problema é mais sobre a falta de boas bibliotecas, portabilidade / manutenção (uma vez que o mantenedor tem uma chance melhor de entender algo escrito em C ++ do que Scheme), e a falta de documentação e comunidade. Eu sei que existem alguns documentos, no entanto, compare isso com C ++, C # ou Java e você entenderá o que quero dizer.
No entanto, se você realmente deseja fazer FP, pode usar este estilo mesmo em C ++ e C #. Claro, não será um 100% FP se você usar a biblioteca padrão. Infelizmente, não acho que o C # seja otimizado para ser usado com programação funcional e provavelmente criará muitos problemas de desempenho.
Esse é mais um post subjetivo, o que eu acho do FP. Não é uma declaração rigorosa.
fonte
Linguagens funcionais são boas em muitas situações. Depende das bibliotecas de uma linguagem funcional específica.
Como você responderia à pergunta "Quando usar uma linguagem de programação orientada a objetos?"?
fonte
Embora esta seja uma questão bastante subjetiva, eu gostaria apenas de acrescentar que as linguagens funcionais são muito usadas para analisar linguagens específicas de domínio ; a natureza funcional é adequada para analisar gramáticas.
fonte
Pelo que vi, é mais uma questão de gosto do que funcionalidade (sem trocadilhos). Na verdade, não há nada em qualquer estilo de linguagem que o torne inerentemente melhor ou pior em tarefas específicas.
fonte
Em geral, use a linguagem em que seja mais fácil expressar a solução para um problema. Para a programação funcional, é quando a solução para um problema é facilmente expressa em termos de funções , daí o nome. Geralmente é bom para operações matemáticas, IA, correspondência de padrões; em geral, qualquer coisa que possa ser decomposta em um conjunto de regras que devem ser aplicadas para obter uma resposta. Você só pode realmente determinar a "melhor" linguagem a ser usada depois de analisar suficientemente o problema. É aqui que o pseudo-código se torna útil. Se você está escrevendo pseudo-código que se parece com FP, use FP.
Claro, todas as linguagens de programação completas são funcionalmente equivalentes, então não importa realmente qual você escolher em termos de quais problemas você pode resolver. Os principais efeitos serão em termos de eficiência e precisão da codificação e facilidade de manutenção.
Observe também que é possível imitar o FP em linguagens OO por meio de APIs inteligentemente projetadas. Por exemplo, eu vi várias bibliotecas Java (JMock é um exemplo) que usam encadeamento de métodos para simular um FP DSL. Em seguida, você verá construções como:
logger.expects(once()).method("error") .with( and(stringContains(action),stringContains(cause)) );
Isso basicamente cria uma função que é avaliada para determinar se alguma sequência de chamada em um objeto simulado está correta. (exemplo roubado de http://www.jmock.org/yoga.html )
Outra sintaxe semelhante ao FP em outras linguagens OO é o uso de encerramentos, como em Ruby.
fonte
Acho que os posts anteriores estão corretos, aqui está uma pequena lista, a programação funcional é uma solução perfeita para o seguinte:
fonte