A programação funcional é um paradigma declarativo. Uma das forças do FP é que os efeitos colaterais são evitados. Dizem que, para alguns problemas, o FP não é um bom ajuste.
Para quais problemas comuns a programação funcional não é uma boa opção?
A programação funcional é um paradigma declarativo. Uma das forças do FP é que os efeitos colaterais são evitados. Dizem que, para alguns problemas, o FP não é um bom ajuste.
Para quais problemas comuns a programação funcional não é uma boa opção?
Respostas:
Aplicativos de natureza muito estável. Os videogames são um bom exemplo, porque modelam o mundo real. Faz muito mais sentido pensar em modificar o estado do mundo em vez de reconstruir a partir do estado anterior toda vez que algo muda.
Um exemplo concreto seria mudar a saúde de um monstro depois de levar um tiro. É muito mais sensato simplesmente alterar sua saúde do que substituí-lo por um monstro totalmente novo que é o mesmo em todos os aspectos, exceto que agora ele tem menos saúde. Esse tipo de mudança compõe quase tudo no mundo dos jogos, e fazer isso de uma maneira pura e funcional não é muito intuitivo. Eu imagino que possa haver algumas penalidades significativas de desempenho, pelo menos se você estiver fazendo isso em uma linguagem puramente funcional.
(Como observação lateral, alguns problemas nos jogos são muito adequados para programação funcional, como a IA. Uma linguagem funcional / imperativa híbrida seria uma excelente opção para esses casos.)
A programação incorporada em tempo real é sobre os efeitos colaterais. Interagindo com io digital e analógico, temporizadores, portas seriais e paralelas, tudo de interessante é feito chamando funções com efeitos colaterais.
Eu diria que a programação da GUI não é uma boa opção para a programação funcional. As GUIs geralmente são muito stateful e é muito mais fácil modelá-las / gerenciá-las usando state, em vez de usar efeitos colaterais gratuitos. Certamente é possível usar uma linguagem de programação funcional para GUIs ... mas provavelmente não é uma boa ideia.
Como observado em outra resposta, os jogos geralmente são mais fáceis de gerenciar, rastreando o estado e, embora você possa escrever um jogo em uma linguagem funcional, é mais fácil e eficiente fazê-lo em uma linguagem "com estado" (por exemplo, uma orientação a objetos língua).
Aplicativos de negócios orientados a dados. Interface de usuário e operações simples de dados não precisam de FP.
filter
, reduce
e map
. O lance em alguns sort
, partition
, groupBy
. Afinal, a linguagem de programação mais usada para escrever esses aplicativos é o Excel, que é uma linguagem funcional.
Não é possível descartar facilmente qualquer problema definido, pois ele não é adequado para programação funcional.
Depende muito da linguagem usada para a programação funcional e de seus recursos.
Um exemplo é o já mencionado Erlang para sistemas embarcados em tempo real.
A plenitude do estado também não é um bom critério em relação à programação funcional; existem várias maneiras bem-sucedidas implementadas em linguagens de programação funcional para lidar com isso.
Os efeitos colaterais também são frequentemente mencionados contra a programação funcional. Todo programa que não é totalmente solipsista tem efeitos colaterais. Portanto, toda linguagem FP do mundo real tem alguma maneira de lidar com isso, é apenas uma questão de encapsular com elegância os efeitos colaterais do mundo.
Não há necessidade de efeitos colaterais arbitrários, como variáveis globais.
Mas existem conjuntos de problemas que facilitam a entrada na programação funcional, porque eles não distorcem sua maneira familiar de ver o problema. Mas uma vez que você considere funcional, mais e mais conjuntos de problemas estarão abertos a menos efeitos colaterais.
Mesmo ao programar C, é sempre uma boa idéia reduzir ao máximo os efeitos colaterais arbitrários, como variáveis globais.