Você está na página 1de 24

PROGRAMAÇÃO

FUNCIONAL
Next Page

By Gabriel Albino Correia Silva


Page 01

O QUE É
PROG. FUNCIONAL?
Programação funcional é o
processo de construir software
através de composição de funções
puras, evitando compartilhamento
de estados, dados mutáveis e
efeitos colaterais.

Next Page
DE ONDE VEIO A IDEIA DE Page 02

PROGRAMAÇÃO FUNCIONAL?
A inspiração do paradigma funcional
veio dos matemáticos teóricos que
lidam com grandes abstrações.

Eles costumam trabalhar com


sistemas complexos e a maneira como
eles encontraram para se manterem
organizados e chegar no objetivo final
foi através das funções.

Next Page
PRINCÍPIOS Page 03

FUNDAMENTAIS

01 Imutabilidade e Estado

Funções Puras e Efeitos


02
Colaterais

Recursividade e
03
Composição de Funções
Next Page
PRINCÍPIOS Page 04

FUNDAMENTAIS
IMUTABILIDADE & ESTADO
Imutabilidade
Refere-se à ideia de que, uma vez que um dado é
atribuído a uma variável, ele não pode ser alterado. Isso
evita efeitos colaterais inesperados, tornando o código
mais previsível e fácil de entender.

Estado
Ao contrário dos paradigmas imperativos, em que as
variáveis mantêm um estado mutável, a Programação
Funcional enfatiza a minimização do uso de variáveis
mutáveis, promovendo a manipulação de dados por
meio de funções puras.

Next Page
PRINCÍPIOS Page 05

FUNDAMENTAIS FUNÇÕES PURAS &


EFEITOS COLATERAIS
Funções Puras
São funções que, dadas as mesmas entradas, sempre
produzem as mesmas saídas, sem efeitos colaterais
observáveis. Isso facilita o raciocínio sobre o código,
testes e compreensão do comportamento do
programa.

Efeitos Colaterais
São alterações observáveis fora do escopo da função,
como a modificação de variáveis globais. A minimização
de efeitos colaterais contribui para um código mais
robusto e fácil de depurar.

Next Page
PRINCÍPIOS Page 06

FUNDAMENTAIS RECURSIVIDADE &


COMPOSIÇÃO DE FUNÇÕES
Recursividade
Na Programação Funcional, a recursividade é
frequentemente preferida em vez de loops imperativos.
Isso se alinha com a ideia de imutabilidade, já que em
vez de modificar variáveis em um loop, você passa
argumentos diferentes para a função recursiva, criando
um novo estado a cada chamada.

Composição de Funções
A recursividade muitas vezes se integra bem com a
composição de funções. Funções pequenas e
especializadas podem ser combinadas para criar
algoritmos complexos de maneira elegante.

Next Page
Page 07

PROGRAMAÇÃO FUNCIONAL VS IMPERATIVA

Alonzo Church Alan Turing

Next Page
PROGRAMAÇÃO FUNCIONAL Page 08

VS IMPERATIVA

Paradigma
Funcional: Baseia-se em funções matemáticas, imutabilidade e
expressões lambda.
Imperativa: Enfoca instruções, estados mutáveis e controle direto do
fluxo.

Imutabilidade e Mutabilidade
Funcional: Dados são imutáveis, incentivando a criação de novos
dados em vez de modificar os existentes.
Imperativa: Dados podem ser modificados diretamente, permitindo
mudanças de estado.

Next Page
PROGRAMAÇÃO FUNCIONAL Page 09

VS IMPERATIVA

Funções Puras vs. Procedimentos


Funcional: Funções puras produzem resultados previsíveis sem
efeitos colaterais.
Imperativa: Procedimentos podem ter efeitos colaterais, alterando o
estado do programa.

Controle de Fluxo
Funcional: Recursividade é comum, expressões lambda oferecem
expressividade.
Imperativa: Uso de loops e instruções de controle para modificar
estados e iterar.

Next Page
PROGRAMAÇÃO FUNCIONAL Page 10

VS IMPERATIVA

Tipagem
Funcional: Tipagem forte e estática é comum, verificada em tempo
de compilação.
Imperativa: Variedade de sistemas de tipagem, podendo incluir tipos
dinâmicos.

Paralelismo e Concorrência
Funcional: Facilita paralelismo devido à imutabilidade.
Imperativa: Requer gestão cuidadosa de estados compartilhados
para evitar problemas de concorrência.

Next Page
Page 11

PRINCIPAIS LINGUAGENS FUNCIONAIS

Haskell Scala Lisp

Next Page
Page 12

PRINCIPAIS LINGUAGENS FUNCIONAIS

Linguagem funcional pura.

Conhecida por seu forte sistema de tipos e


ênfase em funções puras.

É amplamente usada em ambientes


acadêmicos e em projetos que valorizam a
Haskell segurança e a expressividade do código.

Next Page
Page 13

PRINCIPAIS LINGUAGENS FUNCIONAIS

Combina programação orientada a objetos e


funcional.

Ela roda na JVM (Java Virtual Machine).

Tem ganhado popularidade devido à sua


interoperabilidade com Java e suporte a
Scala programação funcional.

Next Page
Page 14

PRINCIPAIS LINGUAGENS FUNCIONAIS

É uma família de linguagens com forte ênfase


em listas e manipulação simbólica.

Common Lisp é um dialeto poderoso usado


em inteligência artificial e sistemas
especializados.

Lisp Clojure, derivado de Lisp, é projetado para ser


prático, conciso e rodar na máquina virtual
Java.
Next Page
INFLUÊNCIAS DE Page 15

LINGUAGENS FUNCIONAIS
Lambda Calculus (1930): Desenvolvido ML (Meta Language, 1973): ML
por Alonzo Church, o Lambda Calculus é introduziu o conceito de tipos
um modelo matemático que influenciou polimórficos, influenciando linguagens
fortemente o desenvolvimento de modernas como Haskell.
linguagens funcionais.

LISP (1958): Uma das linguagens mais Haskell (1990): Inspirada por conceitos
antigas, Lisp foi pioneira em muitos matemáticos, Haskell trouxe
conceitos funcionais, como funções de imutabilidade, funções puras e tipagem
primeira classe e recursividade. forte para o mundo da programação.

Next Page
SITUAÇÕES ONDE A Page 16

PROGRAMAÇÃO FUNCIONAL
SE DESTACA

Processamento de Dados

A imutabilidade e a composição de
funções tornam a programação
funcional ideal para manipulação de
grandes conjuntos de dados, como
em análise e transformação de dados.

Next Page
SITUAÇÕES ONDE A Page 17

PROGRAMAÇÃO FUNCIONAL
SE DESTACA

Algoritmos Recursivos

Problemas que podem ser


naturalmente modelados de forma
recursiva, como árvores e grafos, se
beneficiam da elegância e clareza
proporcionadas pela recursividade
funcional.
Next Page
SITUAÇÕES ONDE A Page 18

PROGRAMAÇÃO FUNCIONAL
SE DESTACA

Lógica Complexa

Situações que envolvem lógica


complexa e condições podem ser
mais expressivas e menos propensas a
erros quando abordadas de maneira
funcional, utilizando funções puras e
expressões lambda.
Next Page
DISCUSSÃO SOBRE Page 19

PARALELISMO & CONCORRÊNCIA


Paralelismo Simples Evitando Condições de Corrida Melhor Utilização de Recursos
A imutabilidade facilita a A falta de estados mutáveis Em situações de carga
execução de operações compartilhados simplifica a intensiva, a programação
em paralelo, pois gestão de concorrência, funcional pode otimizar a
diferentes threads ou minimizando a necessidade utilização de recursos
processos podem operar de bloqueios e evitando computacionais, aproveitando
em dados sem o risco de condições de corrida em a natureza sem estado para
alterações concorrentes. sistemas distribuídos. distribuir tarefas de maneira
eficiente.

Next Page
Page 20

APLICAÇÕES
Desenvolvimento Web
(Clojure, Haskell)

A concisão e a expressividade da
programação funcional são aplicadas
na construção de backends escaláveis,
sistemas de gerenciamento de estado e
manipulação de dados em aplicativos
web modernos.

Next Page
Page 21

APLICAÇÕES
Ciência de Dados
(Scala, Haskell)

A programação funcional é eficaz na


expressão de operações complexas de
manipulação e análise de dados. A
imutabilidade também facilita o
rastreamento e a reprodução de
experimentos.

Next Page
Page 22

APLICAÇÕES
Inteligência Artificial
(Lisp, Haskell)
A capacidade de representar
conhecimento de maneira simbólica e
manipular estruturas de dados
complexas faz da programação
funcional uma escolha natural para o
desenvolvimento de algoritmos de
aprendizado de máquina e sistemas
especialistas.
Next Page
Page 23

OBRIGADO

Você também pode gostar