Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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.”
  2. Não. Nada simples. Vamos por partes e definir de forma

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

    (High Order Functions) • Pureza • Lazy Evaluation • Recursividade • Stateless
  5. 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.
  6. 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))
  7. 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)
  8. 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
  9. 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.
  10. High Order Functions Outra vantagem das HOF é a simplificação

    de ações que iriam ser bem mais custosas e verbosas numa linguagem OO
  11. 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; }
  12. High Order Functions Em uma linguagem funcional (define (addone lst)

    (map (lambda (i) (+ 1 i)) lst)) Agora sim, simples.
  13. 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.
  14. 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
  15. 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
  16. Stateless • Quanto mais dados imutáveis no seu programa, maior

    a facilidade de juntar os módulos do sistema sem quebrar nada.
  17. 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!!
  18. 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
  19. Lazy Evaluation • A performance aumenta consideravelmente, pois evita o

    recálculo de expressões • A possibilidade de criar infinitas estruturas de dados
  20. 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
  21. 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.
  22. 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.
  23. 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?
  24. Pureza Você gostaria que seu programa ao rodar recebendo o

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

    infelizmente, é possível acontecer nas linguagens OO, devido aos efeitos colaterais.
  26. 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.
  27. 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
  28. 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.
  29. Programação Funcional e a Indústria A empresa Ericsson desenvolveu a

    famosa linguagem funcional, a Erlang, inicialmente utilizada para sistemas de telecomunicação.
  30. 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.
  31. 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.
  32. 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.