Slide 1

Slide 1 text

Programação Funcional no JavaScript

Slide 2

Slide 2 text

/GuilhermeFarias @guiky

Slide 3

Slide 3 text

Multi-paradigma

Slide 4

Slide 4 text

Características Funcionais - Funções Anônimas - Higher-order function - First-class function - Closure - Currying - Arrow Functions - Evaluation strategy

Slide 5

Slide 5 text

Função Comum function showMessage(){ alert(“hello“); }; showMessage();

Slide 6

Slide 6 text

Funções Anônimas Funções anônimas podem ser usadas ​​para conter funcionalidades que não precisam ser nomeadas, ou possivelmente, para uso a curto prazo. Alguns exemplos notáveis ​​incluem closures e currying.

Slide 7

Slide 7 text

Funções Anônimas function(){ alert(“hello“); }

Slide 8

Slide 8 text

Funções Anônimas (function(){ alert(“hello“); })();

Slide 9

Slide 9 text

Higher-order function Higher-order functions são funções capazes de receber uma função como entrada (parâmetro) e retornar uma função como resultado.

Slide 10

Slide 10 text

Higher-order function jQuery(“.button").click(function() { alert(“hello“); });

Slide 11

Slide 11 text

First-class function Funções que são tratadas como um valor qualquer, podendo ser passadas como parâmetro para outras funções, ser retornada como valor, ser atribuida a variáveis ou ser armazenadas em estruturas de dados.

Slide 12

Slide 12 text

First-class function var showMessage = function (){ alert(“hello“); }; showMessage();

Slide 13

Slide 13 text

Closure É a combinação de uma função com as variáveis definidas no ambiente em que ela foi criada.

Slide 14

Slide 14 text

Closure function counter(){ var x = 0; return function(){ return ++x; } }; var count = counter(); count(); // resultado 1 count(); // resultado 2 count(); // resultado 3 count(); // resultado 4 count(); // resultado 5

Slide 15

Slide 15 text

Currying É uma operação em que você transforma uma função que receberia mais de um parâmetro em uma série de chamadas de funções com apenas um parâmetro cada. Um dos usos dessa técnica é evitar, de forma elegante, que o mesmo parâmetro seja passado para a mesma função.

Slide 16

Slide 16 text

Currying function multiplicar(a){ return function(b){ return a * b; } }; var dobro = multiplicar(2); var triplo = multiplicar(3); dobro(5); // resultado 10 dobro(20); // resultado 40 OBS: multiplicar(10)(2); //resultado 20

Slide 17

Slide 17 text

Arrow Functions - Sintaxe mais limpa - O valor do this não pode ser modificado. - Não pode ser usadas utilizando o construtor (new). - this léxico, o valor this da função será sempre o valor de onde a arrow function foi definida, e não de onde ela foi executada.

Slide 18

Slide 18 text

Arrow Functions var repete = function(valor){ return valor; }; var dobro = function(n) { return n * 2; }; var repete = valor => valor; var dobro = n => n * 2;

Slide 19

Slide 19 text

Evaluation strategy Strict evaluation Quando a função é chamada, ela sempre será processada por completa e retornará o valor final. Lazy evaluation A função só será processada até onde for necessário, isso pode ser útil em várias situações, já que permite, por exemplo, criar uma lista de números infinitos sem a necessidade de “processar todos os números infinitos”

Slide 20

Slide 20 text

Evaluation strategy JavaScript adota o Strict Evaluation como sua “estratégia de processamento”, mas é possivel ter as vantagens do Lazy evaluation utilizando bibliotecas como: - Lazy.js (github.com/dtao/lazy.js) - Stream.js (streamjs.org)

Slide 21

Slide 21 text

Obrigado!