5 Paradigma Funcional

Como visto nos capítulos anteriores, o paradigma orientado a objeto baseia-se em conceitos similares àqueles do paradigma procedimental. Esse alto grau de similaridade entre paradigmas provém, em parte, de uma de suas bases comuns de projeto: a arquitetura de von Neumaan . Consequentemente as linguagens imperativas são eficientes em computadores com essa arquitetura.

Contudo existem outros paradigmas que focam em resolver outros tipos de problemas ou voltados a alguma metodologia de programação particular em vez de uma execução eficiente em uma arquitetura particular de computador. Até agora, entretanto, a reduzida eficiência ao executar programas escritos nesses paradigmas tem impedido que eles se tornem tão populares quanto o paradigma imperativo.

O paradigma funcional baseia-se no conceito matemático de função, em que para cada elemento do seu conjunto domínio (entrada) há apenas um elemento no seu conjunto contradomínio (saída). Programas escritos nele são definições de funções e de especificações de aplicação destas, e as execuções consistem em avaliá-las. Isso resulta em uma abordagem à solução de problemas que difere fundamentalmente dos métodos usados nos paradigmas já vistos até então. Todos os exemplos deste paradigma serão escritos utilizando a linguagem de programação Haskell (exceto quando especificado), que dá suporte ao paradigma funcional .

Em uma linguagem de programação puramente funcional não se usa variáveis ou instruções de atribuição, há apenas a definição de valores, os quais são constantes durante toda sua existência no escopo. Consequentemente, construções iterativas (e.g., while, for, repeat) não são possíveis já que elas são controladas por variáveis, em vez disso, são usadas funções recursivas. Sem variáveis, a execução de um programa puramente funcional não tem nenhum estado em termos de semântica operacional e denotacional .

Os Exemplos 35 e 36 ilustram as definições recursivas das funções fatorial e fibonacci, respectivamente.

Exemplo 35:

fat 0 = 1

fat n = n * fat (n-1)

Exemplo 36:

fib 0 = 0

fib 1 = 1

fib n = fib (n-1) + fib (n-2)