55
PROGRAMAÇÃO FUNCIONAL

Introdução Programação Funcional

Embed Size (px)

Citation preview

Page 1: Introdução Programação Funcional

PROGRAMAÇÃO FUNCIONAL

Page 2: Introdução Programação Funcional

Quem sou ?!

Natan J. MaiEstudante de Ciência da Computação, 7º semestre na UFFS.

@NatanJMai - natanjmai.github.io/

Page 3: Introdução Programação Funcional

Nível: InicianteLinguagem: Haskell

Conteúdo◦ O que é e de onde vem.◦ Diferenças entre paradigmas.◦ Algumas características.◦ Exemplos◦ Quem usa.

INFO

Page 4: Introdução Programação Funcional

Conteúdo◦ O que é e de onde vem.◦ Diferenças entre paradigmas.◦ Algumas características.◦ Exemplos◦ Quem usa.

INFO

Você devia ensinar o que sabe (mesmo não sendo um especialista) - papodehomem.com.br

Page 5: Introdução Programação Funcional

O QUE É ?O começo :)

1

Page 6: Introdução Programação Funcional

O QUE É?

Paradigma Funcional

◦ Forma diferente de computação◦ Baseado no cálculo por funções.◦ Dizemos o que deve ser feito e

não mais como ser feito.◦ Baseado no Cálculo Lâmbda,

apresentado por Alonzo Church na década de 1930.

Page 7: Introdução Programação Funcional

O QUE É?

Paradigma Funcional

◦ Pense em um problema simples, descobrir (x, y) tal que x + y = 6, assumindo x e y menores que 10.

Obs: (x, y) entre 0 e 10.

Page 8: Introdução Programação Funcional

O QUE É?

Paradigma Funcional# Atividade 01

$ Criar arquivo atividade01.hs-- code.

$ ghci$ :load atividade01.hs$ fx

Page 9: Introdução Programação Funcional

O QUE É?

Paradigma Funcional

◦ Este é um problema onde sabemos o que deve ser feito.

◦ No paradigma imperativo teríamos que construir uma forma de resolver.

Page 10: Introdução Programação Funcional

DIFERENTES PARADIGMASNão, linguagens não são sempre iguais.

2

Page 11: Introdução Programação Funcional

PARADIGMAS

Um paradigma de programação se refere à forma em que as computações são feitas e organizadas.

◦ O que é lógica de programação?

Page 12: Introdução Programação Funcional

PARADIGMAS

◦ Alguns principais:

- Funcional- Imperativo- Lógico- Orientado a Objetos

Page 13: Introdução Programação Funcional

PARADIGMAS

◦ Resumidamente:

- Funcional- Funções, cálculo-λ e recursão.

- Imperativo- If, while, for e por aí vai.

- Lógico- Implicações.

- Orientado a Objetos- Classes, objetos e métodos.

Page 14: Introdução Programação Funcional

PARADIGMAS

◦ Funcional vs Imperativo

Foco Qual informação é necessária e quais

transformações são necessárias.

Sequência de passos bem (?)

definida.

Ordem de execução

Baixa importância. É o mais importante.

Fluxos Funções e recursividade.

While, if, for.

Page 15: Introdução Programação Funcional

PARADIGMAS

◦ Exemplos de linguagens:

- Funcional- Haskell, OCaml, Erlang etc.

- Imperativo- C, Java, PHP, etc.

- Lógico- Prolog.

Page 16: Introdução Programação Funcional

CARACTERÍSTICAS

◦ Algumas das principais características:

- Avaliação preguiçosa.- Funções anônimas.- Funções de alta ordem.- Compreensão de listas.- Currying- Estados imutáveis.

Page 17: Introdução Programação Funcional

LAZY EVALUATION

Avaliação preguiçosa é a forma em que as linguagens funcionais controlam as avaliações necessárias.

Page 18: Introdução Programação Funcional

LAZY EVALUATION

Page 19: Introdução Programação Funcional

LAZY EVALUATION

◦ As expressões não são avaliadas caso não sejam utilizadas. Valores não avaliados não serão utilizados.

◦ O paradigma imperativo utiliza eager evaluation.

Page 20: Introdução Programação Funcional

LAZY EVALUATION

Exemplo de lazy evaluation:

# Atividade 02Obter os três primeiros números

da lista começando no número 1.

$ Abrir arquivo atividade01.hsComando take.

Page 21: Introdução Programação Funcional

LAZY EVALUATION

Exemplo de lazy evaluation:

# Atividade 03Obter a primeira tupla do

exercício (01), do x + y = 6.

$ Abrir arquivo atividade01.hsAjustar função anterior.

Page 22: Introdução Programação Funcional

FUNÇÕES ANÔNIMAS

Funções anônimas são logicamente funções sem nome, mas também sem qualquer tipo de definição anterior.

$ (\x -> x) “Quem sou eu?”

Page 23: Introdução Programação Funcional

FUNÇÕES ANÔNIMAS

◦ Também conhecidas como funções Lambda.

- Não é necessário definição.- Interessante quando é preciso

funções casuais.- Bastante util quando utilizadas

como parâmetro.

Page 24: Introdução Programação Funcional

FUNÇÕES ANÔNIMAS

Exemplos de funções anônimas:

$ (\x -> x ^ 3) ((take 1 [10..]) !! 0)$ (\x -> x / 2) 30$ (\x -> x) “Simples assim!”$ (\x -> x) “Qualquer coisa.”

Page 25: Introdução Programação Funcional

FUNÇÕES DE ALTA ORDEMFunções que recebem outras funções como parâmetro, além de poder retornar uma função como resultado.

$ map (\x -> x ^ 2) [1, 2, 3]

Page 26: Introdução Programação Funcional

FUNÇÕES DE ALTA ORDEM

◦ Muitas vezes precisamos passar funções como parâmetro.

- Bastante util quando utilizamos funções anônimas.

$ :t map map :: (a -> b) -> [a] -> [b]

Parâmetros da função map(a -> b) - é uma função como parâmetro[a] - é uma lista como parâmetro

[b] é o resultado da função map

Page 27: Introdução Programação Funcional

FUNÇÕES DE ALTA ORDEM

◦ Map é uma função que recebe uma função e uma lista como parâmetro e aplica a função para todos os itens da lista.

# Atividade 04Criar a nossa própria função

map.

Page 28: Introdução Programação Funcional

COMPREENSÃO DE LISTASListas desempenham um papel importante em diversas linguagens.

$ [ x | x <- [1..10],

x ^ 2 == 9]

[ ]

Page 29: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

◦ Qual a diferença entre {(x, 2x) | x ∈ ℕ, x <= 5} e

[(x, 2 * x) | x <- [0..9], x <= 5] ?

- Resposta: Nenhuma!

[(x, 2 * x) | x <- [0..9], x <= 5]Resultado Conj. Entrada Predicado

Page 30: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

◦ Existem várias funções interessantes para se trabalhar com listas, algumas delas são:

- head [1,2, 3] reverse [1,2,3] - tail [1,2, 3] take 1 [1,2,3] - maximum [1,2,3] last [1,2,3] - minimum [1,2,3] length [1,2,3] - product [1,2,3] sum [1,2,3] ...

Page 31: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

◦ Se vermos listas como uma centopéia, poderíamos representá-lo assim:

Head Last

Tail

Page 32: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

# Atividade 05.0- Receber os 14 primeiros valores a

partir de -1 e atribuir em uma ‘variável’ a.

- (Dica > take)

Resultado ->

Page 33: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

# Atividade 05.1- Para todo valor na lista a,

multiplicar pelo seu quadrado e armazenar em b. Feito isso, reverter a lista b.- (Dica > [... | ...])

Resultado ->

Page 34: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

# Atividade 05.2- Somar todos esses valores de b.

- Dica > “Soma” em Inglês :)

Resultado ->

Page 35: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

# Atividade 06- Soma dos quadrados dos 10

primeiros números > 2.

Dicas > “Soma” em Inglês :)

> “take 10”

> “[ .. | .. ]”

Resultado ->

Page 36: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

# Atividade 07- (x, y, z) tal que (x, y, z) <= 50 e

2x + y - z = 1

3x - y + 2z = 7

x + y + z = 6

Dicas > [ (x, y, z) | x <- [0..50], y <- [0..50], z <- [0..50] .. ]

Resultado ->

Page 37: Introdução Programação Funcional

COMPREENSÃO DE LISTAS

# Atividade 08Soma dos 5 primeiros números

maiores que 0 tal que o seu quadrado seja maior que 1000.

Dicas > sum (take 5 [ x | x <- [0..], … ]

Resultado ->

Page 38: Introdução Programação Funcional

CURRYING

Currying é uma técnica capaz de transformar uma função de múltiplos parâmetros em várias funções de apenas um parâmetro.

Page 39: Introdução Programação Funcional

CURRYING

◦ No fundo, todas as funções em Haskell recebem apenas um parâmetro. Em funções que parecem ser com vários, o que acontece é a técnica de Currying.

Page 40: Introdução Programação Funcional

CURRYING

Exemplos:# Atividade 06- $ div 10 5 é o mesmo que- $ (div 10) 5

Podemos dizer que (div 10)

recebe o primeiro argumento (10) e retorna uma função aguardando o segundo argumento (5).

Page 41: Introdução Programação Funcional

CURRYING

Exemplos:# Atividade 06$ div 10 5 é o mesmo que$ (div 10) 5

:t div$ div :: Integral a => a -> a -> a$ div :: Integral a => a -> (a -> a)

São equivalentes.

Page 42: Introdução Programação Funcional

ESTADOS IMUTÁVEIS

Sem essa de variáveis.

Sem essa de mudança de estados.

Sem essa de novas atribuições.

Page 43: Introdução Programação Funcional

ESTADOS IMUTÁVEIS

Exemplo:$ p = sum [2, 3, 4, 5]

Um prêmio para o primeiro que conseguir fazer funcionar:

$ p = p - 1

Page 44: Introdução Programação Funcional

ESTADOS IMUTÁVEIS

◦ Pode parecer estranho, mas restringindo a possibilidade de mudanças de estados trazem vários benefícios, tais como:

- Valores constantes em programas paralelos e concorrentes.

Page 45: Introdução Programação Funcional

ESTADOS IMUTÁVEIS

- Para a mudança de estados ocorrer, é necessário da criação de um novo estado.

Exemplo:$ p = sum [2, 3, 4, 5]$ q = p - 1

Agora sim.

Page 46: Introdução Programação Funcional

QUEM USA?

Algumas das principais empresas e produtos que utilizam programação funcional.

?

Page 47: Introdução Programação Funcional

QUEM USA.

◦ Haskell- Facebook, - Twitter,- Intel,- Microsoft,- NVIDIA

https://wiki.haskell.org/Haskell_in_industry

Page 48: Introdução Programação Funcional

QUEM USA.

◦ Scala- LinkedIn, - Twitter,- Xerox,- Foursquare,- Sony

http://www.scala-lang.org/old/node/1658

Page 49: Introdução Programação Funcional

QUEM USA.

◦ Erlang- Facebook, - Whatsapp,

http://www.erlang.org/faq/introduction.html

Page 50: Introdução Programação Funcional

Uma linguagem que não afeta a maneira que você pensa sobre programação, não vale a pena ser aprendida.

Alan Perlis

Page 51: Introdução Programação Funcional

NATAN

- Todos os códigos estão emgithub.com/NatanJMai

- Slides emslideshare.net/natanmai9

- Dúvidas/Sugestõ[email protected]

Page 52: Introdução Programação Funcional

Obrigado!

Natan J. MaiEstudante de Ciência da Computação, 7º semestre na UFFS.

@NatanJMai - natanjmai.github.io/

Page 53: Introdução Programação Funcional

CREDITS

Special thanks to all the people who made and released these awesome resources for free:

◦ Presentation template by SlidesCarnival◦ Photographs by Unsplash◦ Imagens do site learnyouahaskell.

Page 54: Introdução Programação Funcional

This presentations uses the following typographies and colors:

◦ Titles & body copy: Quicksand

You can download the fonts on this page:http://www.google.com/fonts#UsePlace:use/Collection:Quicksand:300,400,700

Click on the “arrow button” that appears on the top right

◦ Dark gray #2e3037◦ Aqua #39c0ba◦ Salmon #f35b69◦ Blue #6d9eeb

You don’t need to keep this slide in your presentation. It’s only here to serve you as a design guide if you need to create new slides or download the fonts to edit the presentation in PowerPoint®

PRESENTATION DESIGN

Page 55: Introdução Programação Funcional

SlidesCarnival icons are editable shapes.

This means that you can:● Resize them

without losing quality.

● Change line color, width and style.

Isn’t that nice? :)

Examples: