Download - Light Talk sobre JavaScript Funcional
Programação Funcional em
JavaScript
Sou Emanuel Gonçalves, estudante do curso de Sistemas de Informação,
Unigranrio – Caxias. Sou desenvolvedor Front-End, amo JavaScript e Tecnologias
Web.
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;
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.
Vamos aos princípios e conceitosComo eu programo em PF?
Utilizando funções!
Mas quaisquer tipos de funções e de que qualquer forma?
var counter = 0;
function increment() { counter++; console.log(counter);}
increment(); // 1increment(); // 2
console.log(counter); // 2
Dados imutáveisPerceba que no exemplo anterior, a variável counter é modificada a cada chamada de increment. Coisa chata de acontecer!
Funções devem ser purasOlhe agora a diferença com PF
var counter = 0;
function increment(counter) { return counter + 1;}
increment(counter); // 1increment(counter); // 1
console.log(counter); // 0
E se eu passar como parâmetro um dado não numérico
function increment(x) { x++; console.log(x);}
increment(“a”); // NaN
increment(true); // 2
increment(false); // 1
É importante estabelecer um contrato!
function rntNumber(x) { if (typeof x === “number”) return x; else throw new Error(“É necessário um número”);}
increment(rtnNumber(“a”)); // Errorincrement(rtnNumber(true)); // Errorincrement(rtnNumber(10)); // 11
Sem laços de repetiçãoUse a recursividade
function iterar(x) { if(x == 0) return console.log(x); else console.log(x); return iterar(x-1);}
iterar(5);543210
Bases da PF para funções
Funções devem:Retornar valores ou outras funções!!!Terem, ao menos, um parâmetro;
Dai derivam as:First-Class Functions; eHigh Order Functions
First-Class Functions
É toda função que pode ser:Passada para uma variável;Retornada de uma função;Passada como um parâmetro
High Order Functions
É toda função que:Recebe uma ou mais funções como parâmetro;Retorna uma outra função;
Vamos a mais código?
function somar(x, y) { return x + y;}
function multiplicar(x, y) { return x * y;}
function calcular(f, x, y) { return f(x, y);}
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 COMPOSEvar soma = calcular(soma, 2, 2); // 4 var multiplicacao = calcular(multiplicar, 2, 2); // 4
Curriyng
function add(x) { return function (y) { return x + y; }}
var addFive = add(5);addFive(10); // 15
var addTen = add (10);addTen(10); // 20
Métodos de ArrayMap, filter, reduce, every, some
var numBin = [1, 0, 1, 0, 1, 0] .reverse();
function isBin(x) { return x < 2 && x >= 0;}
// Usando o método everyvar isBinario = numBin.every(isBin);
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
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];
Método someLogicamente 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
Obrigado por sua atenção!!!!emanuelgdev.com.brgithub.com/emanuelgsouza