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 conceitos
Como 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(); // 1
increment(); // 2
console.log(counter); // 2
Dados imutáveis
Perceba que no exemplo anterior, a variável counter é modificada a cada chamada
de increment. Coisa chata de acontecer!
Funções devem ser puras
Olhe agora a diferença com PF
var counter = 0;
function increment(counter) {
return counter + 1;
}
increment(counter); // 1
increment(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”)); // Error
increment(rtnNumber(true)); // Error
increment(rtnNumber(10)); // 11
Sem laços de repetição
Use a recursividade
function iterar(x) {
if(x == 0)
return console.log(x);
else
console.log(x);
return iterar(x-1);
}
iterar(5);
5
4
3
2
1
0
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; e
High 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 COMPOSE
var 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 Array
Map, 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 every
var 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 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
Obrigado por sua atenção!!!!
emanuelgdev.com.br
github.com/emanuelgsouza

Light Talk sobre JavaScript Funcional

  • 1.
  • 2.
    Sou Emanuel Gonçalves,estudante do curso de Sistemas de Informação, Unigranrio – Caxias. Sou desenvolvedor Front-End, amo JavaScript e Tecnologias Web.
  • 3.
    O que veremos? Conceitosbá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;
  • 4.
    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.
  • 6.
    Vamos aos princípiose conceitos Como eu programo em PF?
  • 7.
  • 9.
    Mas quaisquer tiposde funções e de que qualquer forma?
  • 11.
    var counter =0; function increment() { counter++; console.log(counter); } increment(); // 1 increment(); // 2 console.log(counter); // 2
  • 12.
    Dados imutáveis Perceba queno exemplo anterior, a variável counter é modificada a cada chamada de increment. Coisa chata de acontecer!
  • 13.
    Funções devem serpuras Olhe agora a diferença com PF
  • 14.
    var counter =0; function increment(counter) { return counter + 1; } increment(counter); // 1 increment(counter); // 1 console.log(counter); // 0
  • 15.
    E se eupassar como parâmetro um dado não numérico
  • 16.
    function increment(x) { x++; console.log(x); } increment(“a”);// NaN increment(true); // 2 increment(false); // 1
  • 17.
  • 18.
    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
  • 19.
    Sem laços derepetição Use a recursividade
  • 20.
    function iterar(x) { if(x== 0) return console.log(x); else console.log(x); return iterar(x-1); } iterar(5); 5 4 3 2 1 0
  • 21.
    Bases da PFpara funções
  • 22.
    Funções devem: Retornar valoresou outras funções!!! Terem, ao menos, um parâmetro; Dai derivam as: First-Class Functions; e High Order Functions
  • 23.
  • 24.
    É toda funçãoque pode ser: Passada para uma variável; Retornada de uma função; Passada como um parâmetro
  • 25.
  • 26.
    É toda funçãoque: Recebe uma ou mais funções como parâmetro; Retorna uma outra função;
  • 27.
    Vamos a maiscódigo?
  • 28.
    function somar(x, y){ return x + y; } function multiplicar(x, y) { return x * y; } function calcular(f, x, y) { return f(x, y); }
  • 29.
    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
  • 30.
  • 31.
    function add(x) { returnfunction (y) { return x + y; } } var addFive = add(5); addFive(10); // 15 var addTen = add (10); addTen(10); // 20
  • 32.
    Métodos de Array Map,filter, reduce, every, some
  • 33.
    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);
  • 34.
    if(isBinario) { // Usandoo 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
  • 35.
    Método filter É usadoquando 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];
  • 36.
    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
  • 37.
    Obrigado por suaatenção!!!! emanuelgdev.com.br github.com/emanuelgsouza