Javascript é uma linguagem funcional? Eu sei que ele tem objetos e você também pode fazer POO com ele, mas também é uma linguagem funcional, pode ser usada dessa maneira?
Às vezes, as pessoas dizem programação funcional, quando o que elas querem dizer é programação imperativa ou programação procedural . A rigor, a programação funcional é:
Na ciência da computação, a programação funcional é um paradigma de programação que trata a computação como a avaliação de funções matemáticas e evita dados de estado e mutáveis . Ele enfatiza a aplicação de funções, em contraste com o estilo de programação imperativa, que enfatiza as mudanças de estado. A programação funcional tem suas raízes no cálculo lambda, um sistema formal desenvolvido na década de 1930 para investigar a definição de funções, aplicação de funções e recursão. Muitas linguagens de programação funcional podem ser vistas como elaborações no cálculo lambda.
Embora o Javascript não seja amplamente conhecido ou usado como uma linguagem funcional, ele possui alguns elementos funcionais :
JavaScript tem muito em comum com o Scheme. É uma linguagem dinâmica. Possui um tipo de dados flexível (matrizes) que pode simular facilmente expressões s. E o mais importante, as funções são lambdas.
O esquema é um dialeto do Lisp , e provavelmente uma das linguagens que a maioria dos programadores pensa quando discutem programação funcional. Quando se trata de orientação a objetos , o Javascript é uma linguagem orientada a objetos. Mas sua orientação a objetos é baseada em protótipo :
A programação baseada em protótipo é um estilo de programação orientada a objetos em que as classes não estão presentes, e a reutilização do comportamento (conhecida como herança em linguagens baseadas em classes) é realizada por meio de um processo de clonagem de objetos existentes que servem como protótipos. Esse modelo também pode ser conhecido como programação sem classe, orientada a protótipo ou baseada em instância. Delegação é o recurso de linguagem que suporta programação baseada em protótipo.
Portanto, embora o Javascript seja orientado a objetos, ele não segue o modelo baseado em classe mais comum , assim como linguagens como C ++, C #, Java e PHP (e várias outras). E é claro que também é uma linguagem imperativa, o que leva à confusão com a programação funcional que descrevi acima.
Você sabe como o OOP se tornou / parece a próxima evolução na programação, isso significa que 'Programação Funcional' é a próxima evolução
Orientação a objetos e programação funcional são apenas dois dos muitos paradigmas de programação diferentes , são estilos diferentes de programação com diferentes conceitos e abstrações. A palavra-chave é "diferente". Não existe um único paradigma que seja melhor que outros ou mais evoluído que outros; cada um se encaixa em alguns cenários melhor que os outros. Alguns podem ter uma origem bem mais antiga que outros, mas em termos evolutivos os tornam melhores, pois sobreviveram por mais tempo. Mas essa não é uma maneira muito inteligente de ver isso.
Javascript, como descrevi acima e em várias outras línguas, é multiparadigma. Ele permite que você escreva código em estilo imperativo, orientado a objeto e funcional, baseado em protótipo. Cabe a você escolher qual melhor se adequa ao que você está construindo. Existem também várias linguagens de paradigma único, o exemplo canônico é Java, que permite apenas a programação orientada a objetos baseada em classe 1 .
Você realmente deve resistir a qualquer desejo de tratar linguagens e paradigmas como declarações de moda. Há um monte de porcaria por aí, a maioria escrita por fanboys / fangirls ou pessoas de marketing, com pouco (se houver) conhecimento e entendimento de programação. Termos como "melhor", "mais evoluído" etc. simplesmente não se aplicam.
Eu aprendo melhor através de exemplos, talvez alguém possa mostrar executando a mesma tarefa de uma maneira OOP e depois de uma maneira de Programação Funcional para eu entender e comparar o que a programação funcional faz / é.
Essa seria uma maneira terrível de aprender. A orientação funcional e do objeto são estilos bem diferentes, e qualquer exemplo que não seja terrivelmente simples não se encaixaria em um ou outro estilo.
1 Mas ultimamente tenta expandir seu escopo para programação genérica, vamos ver como isso acontece.
Em conclusão:
- Concentre-se em aprender Javascript, é uma linguagem bonita e extremamente útil. Aprenda o idioma, não o hype.
- Alguns paradigmas diferentes, todos igualmente úteis. Você escolhe qual prefere e qual se encaixa melhor no que estiver construindo.
- Se você deseja aprender programação funcional, escolha uma linguagem mais adequada, como Scheme ou Clojure . Mas primeiro você precisa entender os conceitos matemáticos envolvidos.
- Faça alguma pesquisa antes de perguntar. A maioria das suas perguntas é respondida pelos artigos relevantes da Wikipedia. Saber pesquisar e pedir é uma habilidade extremamente importante para qualquer programador.