O que é programação funcional?
A programação funcional é um paradigma de programação em que a base de cálculo é a avaliação de expressões. Algumas características são o uso de funções de ordem superior, transparência referencial e avaliação lenta. As vantagens do estilo de programação incluem que os programas são fáceis de ler, são muito confiáveis e podem ser divididos em componentes. As desvantagens são que os cálculos podem ser lentos e o estilo e a sintaxe são completamente diferentes de outros estilos de programação comuns. O estilo de programação funcional é mais frequentemente adotado por acadêmicos do que por profissionais de ciência da computação.
Como o nome sugere, as funções são uma parte fundamental desse paradigma de programação. As funções podem ser aninhadas em outras funções, chamadas funções de ordem superior, e cada função de ordem superior pode ser dividida em funções de bloco de construção que são fáceis de entender e depurar. Exemplos de algumas funções de ordem superior são Map e Nest. A função Map pega uma função F e a lista de variáveis, por exemplo (x, y, z) e fornece o resultado em uma lista: Mapa [F, (x, y, z)] = (F (x), F (y), F (z)). O Nest assume a função F, a variável x, e o número de iterações: Nest [F, x, 3] = F (F (F (x))).
A programação funcional pura recebe uma entrada e retorna uma saída sem nunca alterar o estado de uma variável. Em outras palavras, uma função com a mesma entrada sempre fornecerá os mesmos resultados, independentemente do que ocorreu anteriormente no programa. Isso é chamado de transparência referencial. Como as funções matemáticas são referencialmente transparentes, a programação funcional é intuitiva para muitos matemáticos, engenheiros e cientistas.
A transparência referencial das funções significa que a ordem de avaliação das funções não é importante. Portanto, as funções não precisam ser avaliadas até que seus resultados sejam necessários, o que é chamado de avaliação lenta. Isso contrasta completamente com a programação imperativa, onde um programa começa com o primeiro comando e percorre a lista até o último comando. A avaliação preguiçosa pula partes do programa que não seguem logicamente ou são supérfluas, o que otimiza automaticamente o programa e pode reduzir o tempo de computação.
A programação funcional tem muitas vantagens sobre outros paradigmas de programação. Funções com entradas e saídas claras são fáceis de ler e entender. Uma vez que uma função é completamente depurada, ela pode ser usada com segurança em outros aplicativos. Máquinas multicore podem ser capazes de calcular funções avaliadas independentemente em paralelo, melhorando drasticamente o desempenho dos programas.
Infelizmente, nem todos os programas se prestam à computação paralela, e os programas funcionais de computação podem ser bastante lentos. Os programas funcionais dependem muito da recursão, que geralmente é menos eficiente do que usar loops tradicionais ou métodos de iteração. De fato, a programação funcional pode ser bastante desajeitada e difícil de aprender, pois não se assemelha a outros paradigmas mais comuns, como a programação orientada a objetos.
Os acadêmicos tendem a favorecer a programação funcional, pois fornece uma maneira clara e compreensível de programar problemas complexos do mundo real. Algumas línguas puras são Haskell e Erlang. O Mathematica é especializado em matemática simbólica, R é especializado em estatística e J é especializado em análise financeira. Linguagens multiparadigmas, como Scala e F #, suportam a programação funcional e outros estilos de programação.