Estou realmente tendo dificuldade em entender a diferença entre os paradigmas de programação procedural e funcional .
Aqui estão os dois primeiros parágrafos da entrada da Wikipedia sobre 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 estados e dados mutáveis. Ele enfatiza a aplicação de funções, em contraste com o estilo de programação imperativo, que enfatiza as mudanças no 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ção, sua aplicação e recursão. Muitas linguagens de programação funcional podem ser vistas como elaborações do cálculo lambda.
Na prática, a diferença entre uma função matemática e a noção de uma "função" usada na programação imperativa é que as funções imperativas podem ter efeitos colaterais, alterando o valor do estado do programa. Por isso, eles carecem de transparência referencial, ou seja, a mesma expressão de linguagem pode resultar em valores diferentes em momentos diferentes, dependendo do estado do programa em execução. Por outro lado, no código funcional, o valor de saída de uma função depende apenas dos argumentos de entrada para a função, portanto, chamar uma função
f
duas vezes com o mesmo valor para um argumentox
produzirá o mesmo resultadof(x)
ambas as vezes. A eliminação dos efeitos colaterais pode tornar muito mais fácil entender e prever o comportamento de um programa, o que é uma das principais motivações para o desenvolvimento da programação funcional.
No parágrafo 2, onde diz
Por outro lado, no código funcional, o valor de saída de uma função depende apenas dos argumentos de entrada para a função, portanto, chamar uma função
f
duas vezes com o mesmo valor para um argumentox
produzirá o mesmo resultado nasf(x)
duas vezes.
Não é exatamente o mesmo caso para programação procedural?
O que se deve procurar em procedural vs funcional que se destaque?