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

Programação funcional com Javascript

Emanuel G
September 17, 2016

Programação funcional com Javascript

Emanuel G

September 17, 2016
Tweet

More Decks by Emanuel G

Other Decks in Programming

Transcript

  1. Sou Emanuel Gonçalves, estudante do curso de Sistemas de Informação,

    Unigranrio – Caxias. Sou desenvolvedor Front-End, amo JavaScript e Tecnologias Web.
  2. O que veremos? Conceitos básicos da programação funcional: Functions First-Class

    e High Order; Compose e Curriyng; Como fazer um código JavaScript nos moldes da PF? Map, Reduce, Filter, Every, Some;
  3. Que raios é PF? É um paradigma da Ciência da

    Computação que trata um código como um apanhado de funções matemáticas, em que os dados são imutáveis e não há mudança de estado no sistema.
  4. var counter = 0; function increment() { counter++; console.log(counter); }

    increment(); // 1 increment(); // 2 console.log(counter); // 2
  5. Dados imutáveis Perceba que no exemplo anterior, a variável counter

    é modificada a cada chamada de increment. Coisa chata de acontecer!
  6. var counter = 0; function increment(counter) { return counter +

    1; } increment(counter); // 1 increment(counter); // 1 console.log(counter); // 0
  7. function rntNumber(x) { if (typeof x === “number”) return x;

    else throw new Error(“É necessário um número”); } increment(rtnNumber(“a”)); // Error increment(rtnNumber(true)); // Error increment(rtnNumber(10)); // 11
  8. Funções devem: Retornar valores ou outras funções!!! Terem, ao menos,

    um parâmetro; Dai derivam as: First-Class Functions; e High Order Functions
  9. É toda função que pode ser: Passada para uma variável;

    Retornada de uma função; Passada como um parâmetro
  10. É toda função que: Recebe uma ou mais funções como

    parâmetro; Retorna uma outra função;
  11. function somar(x, y) { return x + y; } function

    multiplicar(x, y) { return x * y; } function calcular(f, x, y) { return f(x, y); }
  12. var soma = somar(2, 2); console.log(soma) // 4 var multiplicacao

    = multiplicar(2, 2); console.log(multiplicação); // 4 // Ou você pode fazer assim, usando COMPOSE var soma = calcular(soma, 2, 2); // 4 var multiplicacao = calcular(multiplicar, 2, 2); // 4
  13. function add(x) { return function (y) { return x +

    y; } } var addFive = add(5); addFive(10); // 15 var addTen = add (10); addTen(10); // 20
  14. var numBin = [1, 0, 1, 0, 1, 0] .reverse();

    function isBin(x) { return x < 2 && x >= 0; } // Usando o método every var isBinario = numBin.every(isBin);
  15. if(isBinario) { // Usando o método map var calculo =

    numBin.map(function(x, i) { return x * (Math.pow(2, i)); // O i é o índice do array }); // Usando o método reduce var calcFinal = calcFinal.reduce(function(x, y) { return x + y; }); } console.log(calcFinal); // 42
  16. Método filter É usado quando você quer “filtrar” o seu

    array var arrayNums = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var numsPares = arrayNums.filter(function(x){ return x % 2 == 0; }); console.log(numsPares); // [2, 4, 6, 8];
  17. Método some Logicamente falando, é o oposto do every, em

    que se apenas um elemento se encaixa na condição, ele retorna true var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]; Var isPar = number.some(function(x){ return x % 2 == 0; }); console.log(isPar); // true