Só porque as funções são objetos de primeira classe, existem fechamentos e funções de ordem superior, o Javascript merece ser chamado de linguagem de programação funcional? A principal coisa que acho que falta é o Pure Functions, e não 'parece' com outras linguagens funcionais, como o lisp (embora isso não seja realmente um bom motivo para não ser um idioma funcional ...)
javascript
functional-programming
terminology
hvgotcodes
fonte
fonte
Respostas:
Repetindo minha própria resposta a uma pergunta semelhante,
fonte
Eu diria que é uma linguagem multiparadigma.
EDIT: É multi-paradigma e inclui construções funcionais.
fonte
se você esticar e distorcer o termo "programação funcional" ao ponto de discussões filosóficas, essa questão poderá ser aberta novamente. No entanto, você acaba no nível de perguntas úteis como "C ++ é realmente uma linguagem de programação"?
A resposta para sua pergunta em um nível mais diário é "não" .
Programação funcional significa que o programa é conceitualizado como uma avaliação de uma função, e não como um fluxo de controle. O código é uma descrição das funções e não possui um conceito inerente de um fluxo de controle.
O JavaScript possui um fluxo de controle e é conceitualizado como uma linguagem imperativa. Do seu objetivo de design, claramente não é uma linguagem funcional.
fonte
O termo linguagem "programação funcional" está tão sobrecarregado hoje em dia que é quase inútil. Existem dois significados dominantes:
Escolha o seu significado e, em seguida, a pergunta é respondida.
fonte
Eu não acho que exista uma definição concreta de programação funcional, no entanto, muitas coisas que as pessoas consideram "programação funcional" podem ser feitas com javascript. Aqui está um bom exemplo breve neste artigo.
fonte
Para mim, o Javascript é uma linguagem imperativa e uma linguagem funcional, e você pode optar por usá-lo de qualquer maneira e até (por exemplo ) nos dois sentidos. Ou você pode optar por usar um paradigma e nunca tocar no outro. Você decide. Eu, como você, não acho que o Javascript deva ser chamado de Linguagem Funcional, porque permite entrar e sair do paradigma de programação funcional. Talvez se tivesse algum tipo de pragma, para limitar você usando apenas paradigmas de programação funcional, isso seria útil, eu acho. Mas, em resumo, eu digo que é mais uma linguagem imperativa / processual com alguns recursos de programação funcional lançados.
fonte
Costumo não pensar nas linguagens de programação como tendo um paradigma específico, mas que elas se prestam a certos paradigmas. No entanto, apenas porque eles se prestam a um paradigma específico, não significa que você precise usá-lo. É bem possível escrever programas orientados a objetos em C e escrever programas imperativos em ML. Não usar um certo paradigma para resolver um problema, porque a linguagem não foi projetada para isso, é apenas uma limitação artificial (é claro que você ainda deve levar em conta as limitações de uma linguagem ao decidir se uma solução específica será uma boa solução).
fonte
Bem, eu não diria que é programação funcional, mas então eu diria dizer que é orientada a objetos e apenas hoje um amigo disse que não iria colocá-lo na prateleira também.
Então, enquanto eu não diria que é, acho que há espaço para opinião. Ele possui características clássicas de programação funcional, não possui outras.
fonte
Javascript é um ponto. Realmente depende de como você progride. Se eu codificasse de maneira OO, não seria OO? Portanto, se você apenas codificar as coisas de uma maneira 'funcional', seria funcional. Eu acho que é uma linguagem multiparadigma, então chamá-lo de apenas uma coisa não é totalmente exata.
fonte
@petraszd Eu reescrevi seu código um pouco para obter um "novo" para o operador:
Mas eu sei que esse caminho tem desvantagens para grandes loops ...
Pergunta relacionada sobre otimização da recorrência da cauda em JS
PS Postado aqui porque tem problema com a formatação do código ao postar como comentário
fonte
Em Javascript, você pode fazer algo assim !!
Eu criei uma página no github para demonstrar esse conceito e você pode clonar / visualizar minha implementação
fonte
Como sabemos, a linguagem de programação funcional não permite alterar ou alterar os elementos (estado) das funções, mas em javascript é permitido nesse sentido não ser uma linguagem de programação funcional, embora trate a função como cidadãos de primeira classe.
fonte
O que eu realmente odeio em javascript (se você tentar olhar para ele como linguagem FP) é o seguinte:
Você precisa entender o ambiente de pilha JS (não sei se é o termo certo) para entender esse comportamento.
No esquema, por exemplo, você simplesmente não pode produzir isso (Ok, ok - com a ajuda das referências dos idiomas subjacentes, você pode fazê-lo):
fonte