JavaScript Funcional

Em sete minutos

7 masters - 25/09/2013

Plínio Balduino / @p_balduino

Programação Funcional

JavaScript é funcional

Ok, quase

High Order Function

Funções como "cidadão de primeira classe"

Função é um valor

High Order Function

Funções como "cidadão de primeira classe"

function g() { }

var f = function() { }

High Order Function

Uma função recebe outra função como parâmetro

function soma(x, y) {
  return x + y;
}
function multiplicacao(x, y) {
  return x + y;
}
function calcula(op, x, y) {
  return op(x, y);
}
calcula(soma, 2, 3); // 5
calcula(multiplicacao, 2, 3); // 6

High Order Function

Uma função devolve outra função como resultado

function adder(x) {
  return function(y) {
    return x + y;
  }
}

var add5 = adder(5);

add5(10); // 15

Closure

Escopo e contexto

function saudacao(mensagem) {
  return function(nome) {
    alert(mensagem + ", " + nome);
  }
}

var bomDia = saudacao("Bom dia");

bomDia("iMasters");

bomDia("Biu Goiaba");

Partial

Função que não roda sozinha

function saudacao(mensagem) {
  return function(nome) {
    alert(mensagem + ", " + nome);
  }
}

var bomDia = saudacao("Bom dia");

bomDia("iMasters");

bomDia("Biu Goiaba");

Mais recursos

Usando underscore.js

_.map([1, 2, 3], add5); // [6, 7, 8]

_.reduce([1, 2, 3, 4], soma); // 10

function par(x) {return x % 2 == 0};

_.filter([1, 2, 3, 4, 5], par); // [2, 4]


Obrigado