Você está na página 1de 3

Programao Funcional

A programao funcional baseia-se no conceito matemtico de funo, em que


para cada elemento do seu conjunto domnio (entrada) h apenas um elemento no
seu conjunto contra-domnio (sada). Alm disso, as funes so normalmente
expressas por meio de outras funes - de modo que obter o valor da funo para
um determinado conjunto de parmetros envolve no s aplicar as regras daquela
funo, mas tambm fazer uso de outras funes.
*****Por essa razo, a programao funcional no possui o conceito de
"variveis de estado"; se um valor qualquer (seja ele numrico, textual, um vetor,
matriz, ou algo mais complexo) aparece num momento qualquer da computao,
considera-se que aquele valor nico e imutvel durante todo o processo. Podese estabelecer relaes entre valores - como dizer que 2 a metade de 4 - mas o
valor 2 sempre ser um 2 e o 4 sempre ser um 4.

Em cincia da computao, programao funcional um paradigma de programao


que trata a computao como uma avaliao de funes matemticas e que evita estados
ou dados mutveis.
Ela enfatiza a aplicao de funes, em contraste da programao imperativa, que
enfatiza mudanas no estado do programa[1].
Uma funo, neste sentido, pode ter ou no ter parmetros e um simples valor de
retorno. Os parmetros so os valores de entrada da funo, e o valor de retorno o
resultado da funo. A definio de uma funo descreve como a funo ser avaliada
em termos de outras funes.
Por exemplo, a funo definida em termos de funes de exponenciao e adio. Do
mesmo modo, a linguagem deve oferecer funes bsicas que no requerem definies
adicionais.
Linguagens de programao funcionais, especialmente as puramente funcionais, tem
sido mais usadas academicamente que no desenvolvimento comercial de software.
Entretanto, algumas linguagens notveis usadas na indstria e no comrcio incluem
Erlang (aplicaes concorrentes)[2], R (estatstica), Mathematica (matemtica simblica)
[3]
J, K (anlise financeira) e XSLT.[4][5] Importantes influncias na programao
funcional foram o clculo lambda, as linguagens de programao APL e Lisp, e mais
recentemente ML, Haskell, OCaml, F# e Elixir.

Desenvolvimento[editar | editar cdigo-fonte]

As funes podem ser manipuladas numa grande variedade de formas numa linguagem
de programao funcional.
As funes so tratadas como valores de primeira importncia, o que o mesmo que
dizer que funes podem ser parmetros ou valores de entrada para outras funes e
podem ser os valores de retorno ou sada de uma funo. Ento podemos entender
paradigma funcional como um mapeamento dos valores de entrada nos valores de
retorno, atravs de funes.
Isso permite que funes como mapcar em LISP e map em Haskell que tomam ambos
uma funo e uma lista como entrada e aplicam a funo de entrada a cada elemento da
lista.
Funes podem ser nomeadas, como em outras linguagens, ou definidas anonimamente
(algumas vezes durante a execuo do programa) usando uma abstrao lambda e
usadas como valores em outras funes. Linguagens funcionais tambm permitem que
funes sejam do tipo curry. Currying uma tcnica para reescrita de funes com
mltiplos parmetros como a composio de funes de um parmetro.
A funo do tipo curry pode ser aplicada apenas a um subconjunto de seus parmetros.
O resultado uma funo onde os parmetros neste subconjunto so agora fixados
como constantes, e os valores do resto dos parmetros ainda no so especificados. Esta
nova funo pode ser aplicada aos parmetros restantes para obter o valor da funo
final.
Por exemplo, uma funo adiciona(x,y) = x + y pode ser do tipo curry de forma
que o valor de retorno adiciona(2) note que no h um parmetro y ser uma
funo annima, o que equivalente funo adiciona2(y) = 2 + y. Esta nova
funo tem apenas um parmetro e corresponde a adicionar 2 a um nmero. Novamente,
isso apenas possvel porque as funes so tratadas como valores de primeira
importncia.
O clculo lambda pode ser considerado a primeira linguagem de programao
funcional, embora nunca tenha sido projetada para ser realmente executada em um
computador. um modelo de computao projetado por Alonzo Church nos anos 1930
que oferece um modo muito formal de descrever um clculo de uma funo. A primeira
linguagem de programao funcional criada para computadores foi LISP, desenvolvida
por John McCarthy no Instituto de Tecnologia de Massachusetts (MIT) no fim dos anos
1950.
Mesmo no sendo uma linguagem de programao puramente funcional, LISP
introduziu a maioria das caractersticas hoje encontradas nas modernas linguagens de
programao funcional.

Scheme foi uma tentativa posterior de simplificar e melhorar LISP. Nos anos 1970 a
linguagem ML foi criada pela Universidade de Edimburgo, e David Turner desenvolveu
a linguagem Miranda na Universidade de Kent. A linguagem Haskell foi lanada no fim

dos anos 1980 numa tentativa de juntar muitas ideias na pesquisa de programao
funcional.