$30 off During Our Annual Pro Sale. View Details »

Why functional programming matters (portuguese version)

Why functional programming matters (portuguese version)

Rodrigo Araújo

May 28, 2014
Tweet

Other Decks in Programming

Transcript

  1. Why Functional Programming Matters

    View Slide

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

    View Slide

  3. Afinal, o que é Programação Funcional?

    View Slide

  4. 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.”

    View Slide

  5. Simples?

    View Slide

  6. View Slide

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

    View Slide

  8. 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

    View Slide

  9. Principais Características da
    Programação Funcional

    Funções de Ordem Superior (High Order
    Functions)

    Pureza

    Lazy Evaluation

    Recursividade

    Stateless

    View Slide

  10. 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.

    View Slide

  11. 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))

    View Slide

  12. 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)

    View Slide

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

    View Slide

  14. High Order Functions
    Modularização

    View Slide

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

    View Slide

  16. 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

    View Slide

  17. 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.

    View Slide

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

    View Slide

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

    View Slide

  20. 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;
    }

    View Slide

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

    View Slide

  22. High Order Functions

    View Slide

  23. Stateless
    Ou seja,
    Não armazenar estado.

    View Slide

  24. Stateless
    Linguagens puramente funcionais mudam
    drasticamente a filosofia de programar.

    View Slide

  25. 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.

    View Slide

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

    View Slide

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

    View Slide

  28. Stateless
    Programação Paralela e Concorrente

    View Slide

  29. Stateless

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

    View Slide

  30. 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

    View Slide

  31. 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

    View Slide

  32. Stateless

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

    View Slide

  33. 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!!

    View Slide

  34. Lazy Evaluation
    A arma secreta da programação funcional

    View Slide

  35. 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

    View Slide

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

    View Slide

  37. Lazy Evaluation

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

    View Slide

  38. Lazy Evaluation

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

    A possibilidade de criar infinitas
    estruturas de dados

    View Slide

  39. 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

    View Slide

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

    View Slide

  41. 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.

    View Slide

  42. 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.

    View Slide

  43. 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?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. 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.

    View Slide

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

    View Slide

  50. Pureza
    E quais são as vantagens disso?

    View Slide

  51. Pureza

    Programas com comportamentos
    previsíveis

    View Slide

  52. Pureza

    Programas com comportamentos
    previsíveis

    Mais fácil de provar que um programa está
    correto

    View Slide

  53. 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

    View Slide

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

    View Slide

  55. Temos softwares mais modularizados.

    View Slide

  56. 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.

    View Slide

  57. Temos softwares mais seguros.

    View Slide

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

    View Slide

  59. Temos softwares preparados para o
    paralelismo.

    View Slide

  60. Temos softwares mais eficientes.
    #LazyEvaluationFTW

    View Slide

  61. Temos softwares mais eficientes.

    View Slide

  62. Programação Funcional e a Indústria

    View Slide

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

    View Slide

  64. #KnowNothing
    #Innocent

    View Slide

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

    View Slide

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

    View Slide

  67. 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.

    View Slide

  68. 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.

    View Slide

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

    View Slide

  70. Why Functional Programming Matters
    Perguntas?

    View Slide

  71. 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.

    View Slide