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

Workshop JSFP - SEMCOMP 2021

Workshop JSFP - SEMCOMP 2021

Ana Luiza Portello

October 26, 2021
Tweet

More Decks by Ana Luiza Portello

Other Decks in Programming

Transcript

  1. Engenheira de software & cientista da computação Programming languages, crypto,

    web Gêmeos ascendente em escorpião Sometimes speaker, sometimes community manager, always shitposter Ana Luiza Portello Bastos
  2. • Um pouco de história • O que é o

    paradigma • Jargões comuns
  3. TURING MACHINE Em 1936 o Allan Turing formalizou um modelo

    abstrato de um computador chamado "Turing Machine"
  4. TURING MACHINE Em 1936 o Allan Turing formalizou um modelo

    abstrato de um computador chamado "Turing Machine"
  5. CALCULO LAMBDA O sistema formal do calculo lambda foi definido

    nos anos 30 pelo Alonzo Church para explorar a computabilidade com definição de funções e recursão.
  6. LAMBDA CALCULUS λx . x + 1 (a) (head) (body)

    (outra expressao) expressão A solução de um problema é feita por meio de funções, usando uma implementação um conjunto de primitivas e regras pra construir esses primitivas
  7. A cabeça define uma função e seus parametros formais(x), e

    o corpo a expressão (x + 1). Função que recebe x a qual adiciona x a 1 λx . x + 1 (a) (head) (body) (outra expressao) expressão
  8. CALCULO LAMBDA 1932 - "A set of postulates for the

    foundation of logic" 1936 - untyped lambda calculus 1940 - typed lambda calculus 1960 - Passam a aplicar o sistema lógico em linguagens de programação
  9. TURING MACHINE 1937 - Provou equivalencia ao calculo lambda em

    termos de computabilidade "Tese de church-turing"
  10. Mas até poucos anos atrás computadores não eram tão rapidos

    quanto hoje em dia e tinham bem pouco poder de processamento. Pra isso era importante utilizar linguagens que possibilitassem uma economia na memória e para isso linguagens imperativas que lidavam bem com a memória e faziam tarefas de forma procedural ficaram em alta.
  11. “We were after the C++ programmers. We managed to drag

    a lot of them about halfway to Lisp.” Guy Steele, co-author of the Java language specification
  12. OO Massa do cupcake tem um estado(self ou this) Esse

    estado é MUTAVEL E os metodos vão constantemente mudar esse estado Existe uma ordem pra que tudo seja feito(É imperativo)
  13. DECLARATIVAS - Descreve o "o que" ao invés do "como"

    - Descreve do "input" os valores do "output" ao invés de pensar na manipulação de variaveis na memoria.
  14. DECLARATIVA Normalmente fazemos uma massa doce com proporcoes x de

    leite, farinha e açucar Fermento faz a massa crescer A massa cresce 30 por minutos ate ficar boa pra assar O forno é o lugar em que assamos bolo A forma ideal é diferente para se queremos bolo, cupcake ou pão Por assar entendemos colocar a massa sob uma temperatura de 200c ou por 40 minutos no microondas.
  15. FUNÇOES - Código que pode ser executado mais de uma

    vez - Relação entre input e output
  16. FUNÇOES - Você se lembra de aprender sobre f(x) na

    escola? - O que é equação y = f(x)? f(x) = 2x^3 + 3
  17. FUNÇOES - Supondo que o valor de x é 2.

    Se você coloca em uma equação o valor fica 11. - 11 é o retorno da função f(2), que representaria o y na img
  18. OOP x FUNCIONAL - Criar codigo claro - Ser flexível

    ao crescimento do código - Ser bug-free
  19. OOP x FUNCIONAL - Dados e comportamento são separados -

    OOP muda estado enquanto fp faz os dados fluirem - Um é declarativo outro imperativo - Base teorica por trás
  20. OOP x FUNCIONAL Foco do programador Como executar tarefas (algoritmos)

    e como controlar alterações no estado. Informações que é desejada e que transformações são necessárias. Alterações de estado Importante. Inexistente. Ordem de execução Importante. Baixa importância. Controle de fluxo primária Loop, condições, e chamadas de função (método). Chamadas de função, incluindo a recursão. Unidade principal de manipulação Instâncias das classes ou estruturas. Funções como objetos de primeira classe e coleções de dados. https://docs.microsoft.com/pt-br/dotnet/standard/linq/functional-vs-imperative-programming
  21. JS Pode ter • Partial application • Pipeline • Pattern

    Matching Tem • HOF • Funções anonimas • Loops declarativos(map, filter, reduce, flatmap)
  22. JS pode ser mais produtivo mas certamente não é tão

    seguro quando falamos de mutabilidade de estado.
  23. • Mil bibliotecas diferentes • Atualizações melhorando a linguagem •

    Padrões de codigo • Já que as mutações não são seguras podemos procurar aplicar padrões que garantem um código mais bug free
  24. IDEPOTENCIA Em funções puramente matematicas não existe a possibilidade de

    chamar a mesma função com os mesmos valores duas vezes e dar diferentes resultados
  25. PUREZA Quando as funções são puras, ou seja, independentes de

    estado ou do ambiente, não precisamos dar a mínima importância para quando ou onde elas serão computadas.
  26. - O dominio do que é estado e o que

    é logica - Pequenas modificações tocam um estado espalhado pela aplicação - Em caso de algo falhar, ou concorrencia estamos mais prunes a erros
  27. • O estado aumenta a complexidade e torna dificil de

    "reason about" problemas locais. • A solução é isolar o estado e aumentar o codigo puro • Se você precisa de umestado local, encapsule-o em funções puras. • Side Effects são necessarios, mas podem ficar isolados e abstraidos • Testar funções puras é só questão de checar um valor de retorno!
  28. MOTIVACAO • Mantenabilidade de código • Menos bugs • Testar

    se torna uma tarefa facil! • Muito mais facil lidar com estado! • Front end: estado imutavel, declaratividade • Lidar com o caos que é o estado
  29. NA PRATICA As vezes você vai precisar sacrificar pureza por

    performance, limitações da linguagem ou por simplicidade. Nesse caso o ideal é tentar encapsular o estado ou tentar de alguma forma isolar o efeito colateral.
  30. NA PRATICA Se em programação funcional tudo são funções como

    lidamos com estas funções? A ideia é que cada uma delas tenha uma unica responsabilidade dentro de um contexto
  31. • Em linguagens procedurais nossas computações envolvem nosso código separado

    em modulos operando em dados. • Já em linguagens orientadas a objetos encapsulamos nosso código e dados para que eles interajam entre si por meio de mensagens.
  32. COMPOSICAO Aluno foi aprovado? • Fazer a média dos trabalhos

    e provas • Incrementa 1 se o aluno tem nota de participação • Se for maior que 6 está provado
  33. PIPE Pipeline em ciência da computação é todo tipo de

    processamento de dados conectado em série em que a saída de um elemento é a entrada do proximo similar ao pipe do UNIX.
  34. Resolver com PIPE! Aluno foi aprovado? • Fazer a média

    dos trabalhos e provas • Incrementa 1 se o aluno tem nota de participação • Se for maior que 6 está provado
  35. HOF A ideia de que funções são entidades primarias. Elas

    são tratadas como valores e usados como dados! - Passadas como paramentros - Passadas como resposta de uma função
  36. HOF Agora a função subtrai os valores e faz o

    double const doubleSum = (a, b) => (a - b) * 2;
  37. Essas funções são parecidas, a unica diferença é o operador.

    Se podemos tratar funções como valores e passa-los como argumentos, pq não passar a operação por argumento?
  38. Como resolver com JS? Quero a soma dos valores +

    taxa de 10% que são maiores que 500
  39. - Ao invés de Loops, iterações declarativas. - Ao invés

    de design patterns, componentização - Novos fluxos de trabalho: pipelines, pattern matching, partial application, laziness, currying.
  40. CREDITS: This presentation template was created by Slidesgo, including icons

    by Flaticon and infographics & images by Freepik Perguntas? [email protected] anabastos.dev Contact @naluhh anabastos