Programei um pouco de Haskell e Prolog como parte de alguns cursos da universidade, mas é isso. E nunca vi isso ser usado na indústria (não que eu tenha muita experiência de trabalho, mas nunca vi um anúncio em que você precise conhecê-los).
Então, devemos usar linguagens de programação funcional e / ou lógica com mais frequência? Existem vantagens ou desvantagens em usá-las ou não?
Primeiro de tudo - porque o compilador precisa fazer muito mais. Se você deseja criar um compilador imperativo, você pode quase transformar 1-1 em assembler e o código produzido terá velocidade aceitável (com certeza - pode haver muito o que fazer, mas é 'basicamente' compilação 1-1 + otimização). Compiladores funcionais precisam lidar com inline pesado, otimização de chamada final, etc. Portanto, a implementação de linguagens funcionais era muito mais lenta que C / C ++ / ... no passado (no entanto, elas ganham muita velocidade a cada iteração à medida que os compiladores estão melhorando).
Em segundo lugar - os programadores são tão acostumados a afirmar que não podem 'aceitar' a abordagem "não existe spoo ... state". Claro - a falta de estado não é útil em cada condição, mas a falta de estado (global) não significa falta de estado local.
Terceiro - a programação funcional não tem uma história legal por trás disso. O POO tem uma história legal quando os objetos são mapeados para substantivos e quão intuitivo é. Depois, você sabe que não é tão simples, porque você não pode criar uma classe
Manager
com a subclasse deEmployee
comoEmployee
pode ser promovidaManager
e você precisa brincar com os decoradores. Os programas funcionais têm uma história em matemática que é IMHO mais útil, mas menos comercializável.Como internamente da perspectiva do computador - não há diferença entre computação paralela e computação simultânea, muitos programadores não vêem diferença e muitas linguagens têm as mesmas primitivas para lidar com ambas. Graças à falta de estado local e threads leves em linguagens de programação funcional, a paralelização do algoritmo é muito mais fácil. No entanto, a programação simultânea não é facilitada automaticamente, pois a simultaneidade se refere ao estado global.
Finalmente - existem muitos programas mais antigos escritos em estilo inperativo. Mesmo a passagem da linguagem imperativa para a linguagem imperativa é muito mais simples que a funcional.
Até onde eu sei, os bancos de investimento começam a adotar internamente os programas funcionais, para que eles cheguem ao XXI c. (em uma área muito importante, embora oculta) - para que ganhem impulso.
PS. Embora eu acredite que os programas funcionais sejam "melhores" no sentido de esconder melhor a complexidade do que outras abordagens, isso não significa que não haja áreas como scripts que sejam inerentemente imperativas.
fonte
Uma linguagem de programação é uma forma de representação de informações. Nesse caso, instruções para o computador seguir. No entanto, a representação também é importante para o público-alvo (ou seja, os programadores).
O conceito funcional / lógico não é tão comum na vida cotidiana quanto os conceitos procedimentais. Se você ler as instruções (por exemplo, como usar sua televisão, reprodutor de DVD ou construir alguns móveis da IKEA), elas são escritas principalmente de maneira processual (embora em linguagem natural).
Portanto, muitas pessoas que não estão profundamente envolvidas em matemática ou ciências geralmente estão muito mais familiarizadas com esses conceitos processuais do que os lógicos ou funcionais.
Eu acho que isso tem muito impacto na escolha de qual classe de linguagem de programação é usada. No final, o conjunto de problemas que podem ser resolvidos com qualquer uma dessas linguagens de programação é praticamente o mesmo (desde que todos estejam completos).
No entanto, muitas linguagens procedurais obtêm cada vez mais facetas de outros conceitos. Python pode fazer cálculos e fechamentos lambda, também em rubi. Javascript que é usado com muita frequência na indústria é realmente uma linguagem funcional (mesmo a maioria das pessoas "usa mal" é usá-lo mais de maneira processual). Portanto, é realmente a tarefa do programador usar esses recursos adequadamente onde eles se encaixam.
fonte