Why functional programming matters (portuguese version)

Why functional programming matters (portuguese version)

C94341c0a3ffcf9e81de279047af3566?s=128

Rodrigo Araújo

May 28, 2014
Tweet

Transcript

  1. Why Functional Programming Matters

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

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

  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.”
  5. Simples?

  6. None
  7. Não. Nada simples. Vamos por partes e definir de forma

    simples o que vem a ser a Programação Funcional.
  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
  9. Principais Características da Programação Funcional • Funções de Ordem Superior

    (High Order Functions) • Pureza • Lazy Evaluation • Recursividade • Stateless
  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.
  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))
  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)
  13. High Order Functions E qual a vantagem de se usar

    Funções de Ordem Superior?
  14. High Order Functions Modularização

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

    John Hughes
  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
  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.
  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
  19. High Order Functions Suponha a necessidade de aplicarmos uma operação

    qualquer em cada elemento de um array
  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; }
  21. High Order Functions Em uma linguagem funcional (define (addone lst)

    (map (lambda (i) (+ 1 i)) lst)) Agora sim, simples.
  22. High Order Functions

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

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

  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.
  26. Stateless Não posso alterar valores das variáveis? Como? Está louco?

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

  28. Stateless Programação Paralela e Concorrente

  29. Stateless • Programação concorrente e paralela tem se tornado cada

    vez mais necessário nos dias de hoje
  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
  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
  32. Stateless • Quanto mais dados imutáveis no seu programa, maior

    a facilidade de juntar os módulos do sistema sem quebrar nada.
  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!!
  34. Lazy Evaluation A arma secreta da programação funcional

  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
  36. Lazy Evaluation Ok. E quais os reais benefícios da Lazy

    Evaluation?
  37. Lazy Evaluation • A performance aumenta consideravelmente, pois evita o

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

    recálculo de expressões • A possibilidade de criar infinitas estruturas de dados
  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
  40. Lazy Evaluation Exemplo do aumento de performance: Suponha que você

    tem uma função.
  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.
  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.
  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?
  44. Lazy Evaluation Ponto para as linguagens funcionais. Toma essa, Java!

  45. Pureza Você gostaria que seu programa ao rodar recebendo o

    mesmo input, gerasse retornos diferetes?
  46. Pureza Creio que na maioria das vezes, não.

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

    infelizmente, é possível acontecer nas linguagens OO, devido aos efeitos colaterais.
  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.
  49. Pureza Pureza quer dizer que não ocorrerá efeitos colaterais.

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

  51. Pureza • Programas com comportamentos previsíveis

  52. Pureza • Programas com comportamentos previsíveis • Mais fácil de

    provar que um programa está correto
  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
  54. Ou seja, com programação funcional temos softwares mais previsíveis.

  55. Temos softwares mais modularizados.

  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.
  57. Temos softwares mais seguros.

  58. Temos softwares mais seguros. Pureza gera previsibilidade, que gera corretude,

    que por sua vez, gera segurança.
  59. Temos softwares preparados para o paralelismo.

  60. Temos softwares mais eficientes. #LazyEvaluationFTW

  61. Temos softwares mais eficientes.

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

  63. Muitos acusam a Programação Funcional de ser uma linguagem puramente

    acadêmica e sem aplicação no mundo real.
  64. #KnowNothing #Innocent

  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.
  66. Programação Funcional e a Indústria Erlang morreu desde então?

  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.
  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.
  69. Programação Funcional e a Indústria #partiuProgramaçãoFuncional #AdeusJava #AdeusPHP

  70. Why Functional Programming Matters Perguntas?

  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.