Slide 1

Slide 1 text

Why Functional Programming Matters

Slide 2

Slide 2 text

Baseado no famoso paper de John Hughes “Why Functional Programming Matters” 1990

Slide 3

Slide 3 text

Afinal, o que é Programação Funcional?

Slide 4

Slide 4 text

Teorias mais formais da matemática citam a programação funcional como: “Programação funcional é baseado em mônadas... e uma mônada é simplesmente uma tripla(T, n, u), onde T é uma endofunção T: X->X e n: 1->T e u: T x T T são duas transformações naturais que satisfazem → as seguintes leis: Identidade: u(n(t)) = T = u(T(n)) Associativa: u(u(T x T) x T)) = u(T x u(Tx T)) Em outras palavras: Uma mônada em X é apenas um monóide na categoria das endofunções de X, com o produto x sendo substituido pela composição das endofunções e setado unitáriamente pela identidade da endofunção Simples.”

Slide 5

Slide 5 text

Simples?

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Não. Nada simples. Vamos por partes e definir de forma simples o que vem a ser a Programação Funcional.

Slide 8

Slide 8 text

Principais Características da Programação Funcional ● A programação funcional tem uma filosofia diferente dos outros paradigmas. ● A ideia principal é usar Funções, ao invés de objetos e procedures, para construir os blocos de um programa. ● Para isso, temos alguns conceitos chaves

Slide 9

Slide 9 text

Principais Características da Programação Funcional ● Funções de Ordem Superior (High Order Functions) ● Pureza ● Lazy Evaluation ● Recursividade ● Stateless

Slide 10

Slide 10 text

High Order Functions Funções de Ordem Superior são funções que recebem outras funções como parâmetro ou podem até retornar outras funções.

Slide 11

Slide 11 text

High Order Functions Funções de Ordem Superior são funções que recebem outras funções como parâmetro ou podem até retornar outras funções. f (g(x))

Slide 12

Slide 12 text

High Order Functions f (x)=x g(x)=2∗x g( f (x))=2∗ f (x) Logo Passamos a função f(x) como um parâmetro de g(x)

Slide 13

Slide 13 text

High Order Functions E qual a vantagem de se usar Funções de Ordem Superior?

Slide 14

Slide 14 text

High Order Functions Modularização

Slide 15

Slide 15 text

High Order Functions “Modularity is the key to successful programming” John Hughes

Slide 16

Slide 16 text

High Order Functions ● Modularização é a chave para uma fácil manutenção do código ● Modularização é a chave para código legível

Slide 17

Slide 17 text

High Order Functions ● Ou seja, se tivermos bugs ocorrendo, basta achar qual a função que está retornando o que não deve, ir até o código específico da função e conserta-lo.

Slide 18

Slide 18 text

High Order Functions Outra vantagem das HOF é a simplificação de ações que iriam ser bem mais custosas e verbosas numa linguagem OO

Slide 19

Slide 19 text

High Order Functions Suponha a necessidade de aplicarmos uma operação qualquer em cada elemento de um array

Slide 20

Slide 20 text

High Order Functions Em java public static ArrayList addone(ArrayList list) { ArrayList out = new ArrayList(list.size()); Iterator iter = list.iterator(); while(iter.hasNext()) { out.add(new Integer(iter.next().intValue()+1)); } return out; }

Slide 21

Slide 21 text

High Order Functions Em uma linguagem funcional (define (addone lst) (map (lambda (i) (+ 1 i)) lst)) Agora sim, simples.

Slide 22

Slide 22 text

High Order Functions

Slide 23

Slide 23 text

Stateless Ou seja, Não armazenar estado.

Slide 24

Slide 24 text

Stateless Linguagens puramente funcionais mudam drasticamente a filosofia de programar.

Slide 25

Slide 25 text

Stateless Principalmente em não armezenar valores que podem ser alterados em variáveis, ou seja, não se deve alterar o estado de uma variável.

Slide 26

Slide 26 text

Stateless Não posso alterar valores das variáveis? Como? Está louco?

Slide 27

Slide 27 text

Stateless Porque eu não iria querer alterar valores de variáveis?

Slide 28

Slide 28 text

Stateless Programação Paralela e Concorrente

Slide 29

Slide 29 text

Stateless ● Programação concorrente e paralela tem se tornado cada vez mais necessário nos dias de hoje

Slide 30

Slide 30 text

Stateless ● Programação concorrente e paralela tem se tornado cada vez mais necessário nos dias de hoje ● A ideia de não alterarmos nada nas variáveis nos dá o grande poder dos dados imutáveis

Slide 31

Slide 31 text

Stateless ● Programação concorrente e paralela tem se tornado cada vez mais necessário nos dias de hoje ● A ideia de não guardarmos nada em variáveis nos dá o grande poder dos dados imutáveis ● Ou seja, elimina o risco gerado pelas condições de corridas

Slide 32

Slide 32 text

Stateless ● Quanto mais dados imutáveis no seu programa, maior a facilidade de juntar os módulos do sistema sem quebrar nada.

Slide 33

Slide 33 text

Stateless ● Quanto mais dados imutáveis no seu programa, maior a facilidade de juntar os módulos do sistema sem quebrar nada. ● Ou seja, são linguagens preparadas para serem implementadas em multicores, multithreads, sem que o programador se preocupe com isso, porque, novamente, não alteramos estados, não temos deadlocks!!

Slide 34

Slide 34 text

Lazy Evaluation A arma secreta da programação funcional

Slide 35

Slide 35 text

Lazy Evaluation ● É a técnica que consiste em atrasar a chamada de uma expressão até que o valor retornado dessa expressão seja realmente necessário. ● Evita a necessidade de calcular o retorno da função novamente, técnica conhecida como memorização

Slide 36

Slide 36 text

Lazy Evaluation Ok. E quais os reais benefícios da Lazy Evaluation?

Slide 37

Slide 37 text

Lazy Evaluation ● A performance aumenta consideravelmente, pois evita o recálculo de expressões

Slide 38

Slide 38 text

Lazy Evaluation ● A performance aumenta consideravelmente, pois evita o recálculo de expressões ● A possibilidade de criar infinitas estruturas de dados

Slide 39

Slide 39 text

Lazy Evaluation ● A performance aumenta consideravelmente, pois evita o recálculo de expressões ● A possibilidade de criar infinitas estruturas de dados ● A habilidade de definir fluxos de controle como forma de abstrações

Slide 40

Slide 40 text

Lazy Evaluation Exemplo do aumento de performance: Suponha que você tem uma função.

Slide 41

Slide 41 text

Lazy Evaluation Exemplo do aumento de performance: Suponha que você tem uma função. Essa função não usará um dos seus parâmetros.

Slide 42

Slide 42 text

Lazy Evaluation Exemplo do aumento de performance: Suponha que você tem uma função. Essa função não usará um dos seus parâmetro. Sem Lazy Evaluation, esse parâmetro, que pode ser uma função, seria sempre calculado.

Slide 43

Slide 43 text

Lazy Evaluation Exemplo do aumento de performance: Suponha que você tem uma função. Essa função não usará um dos seus parâmetro. Sem Lazy Evaluation, esse parâmetro, que pode ser uma função, seria sempre calculado. Computacionalmente caro, não?

Slide 44

Slide 44 text

Lazy Evaluation Ponto para as linguagens funcionais. Toma essa, Java!

Slide 45

Slide 45 text

Pureza Você gostaria que seu programa ao rodar recebendo o mesmo input, gerasse retornos diferetes?

Slide 46

Slide 46 text

Pureza Creio que na maioria das vezes, não.

Slide 47

Slide 47 text

Pureza Creio que na maioria das vezes, não. E isso, infelizmente, é possível acontecer nas linguagens OO, devido aos efeitos colaterais.

Slide 48

Slide 48 text

Pureza ● Uma função tem efeito colateral quando, ao ser chamada, altera o estado de algo, podendo ser uma variável. ● Ou seja, o comportamento do programa torna- se imprevisível. ● Dependendo bastante da ordem que as expressões são calculadas e chamadas ● Debuggar um programa que possui efeitos colaterais e comportamentos imprevisíveis requer conhecimento sobre o contexto atual dele.

Slide 49

Slide 49 text

Pureza Pureza quer dizer que não ocorrerá efeitos colaterais.

Slide 50

Slide 50 text

Pureza E quais são as vantagens disso?

Slide 51

Slide 51 text

Pureza ● Programas com comportamentos previsíveis

Slide 52

Slide 52 text

Pureza ● Programas com comportamentos previsíveis ● Mais fácil de provar que um programa está correto

Slide 53

Slide 53 text

Pureza ● Programas com comportamentos previsíveis ● Mais fácil de provar que um programa está correto ● Quebra a necessidade de pensar na ordem de execução das expressões

Slide 54

Slide 54 text

Ou seja, com programação funcional temos softwares mais previsíveis.

Slide 55

Slide 55 text

Temos softwares mais modularizados.

Slide 56

Slide 56 text

Temos softwares mais modularizados. Afinal, com as Funções de Ordem Superior e a Lazy Evaluation, temos ferramentas para separar cada módulo do sistema, distribuindo, de forma eficiente, as responsabilidades. Garantindo uma melhor manutenção.

Slide 57

Slide 57 text

Temos softwares mais seguros.

Slide 58

Slide 58 text

Temos softwares mais seguros. Pureza gera previsibilidade, que gera corretude, que por sua vez, gera segurança.

Slide 59

Slide 59 text

Temos softwares preparados para o paralelismo.

Slide 60

Slide 60 text

Temos softwares mais eficientes. #LazyEvaluationFTW

Slide 61

Slide 61 text

Temos softwares mais eficientes.

Slide 62

Slide 62 text

Programação Funcional e a Indústria

Slide 63

Slide 63 text

Muitos acusam a Programação Funcional de ser uma linguagem puramente acadêmica e sem aplicação no mundo real.

Slide 64

Slide 64 text

#KnowNothing #Innocent

Slide 65

Slide 65 text

Programação Funcional e a Indústria A empresa Ericsson desenvolveu a famosa linguagem funcional, a Erlang, inicialmente utilizada para sistemas de telecomunicação.

Slide 66

Slide 66 text

Programação Funcional e a Indústria Erlang morreu desde então?

Slide 67

Slide 67 text

Programação Funcional e a Indústria Atualmente a Erlang é utilizada por empresas como Nortel, T-Mobile e gigantes atuais como o Facebook e Whatsapp.

Slide 68

Slide 68 text

Programação Funcional e a Indústria Ou seja, se gigantes da tecnologia estão percebendo as vantagens das linguagens funcionais, tem muita coisa em jogo.

Slide 69

Slide 69 text

Programação Funcional e a Indústria #partiuProgramaçãoFuncional #AdeusJava #AdeusPHP

Slide 70

Slide 70 text

Why Functional Programming Matters Perguntas?

Slide 71

Slide 71 text

Why Functional Programming Matters Obrigado! Nome: Rodrigo Araújo Home Page: rodrigoaraujo.me Estudante de Ciência da Computação Universidade Salvador – Escola de Engenharia e Tecnologia Agradecimento especial para Juliana Barreto por me ajudar no Design e disponibilizar a fonte. E por ser a garota mais incrível e linda do mundo.