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

Programacao Funcional no Javascript

Programacao Funcional no Javascript

JavaScript é uma linguagem multi-paradigma, que possui suporte à programação funcional, nesta talk será abordado e explicado as características do paradigma funcional no JavaScript.

Guilherme Farias

June 05, 2014
Tweet

More Decks by Guilherme Farias

Other Decks in Programming

Transcript

  1. Características Funcionais - Funções Anônimas - Higher-order function - First-class

    function - Closure - Currying - Arrow Functions - Evaluation strategy
  2. 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.
  3. 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.
  4. 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.
  5. Closure É a combinação de uma função com as variáveis

    definidas no ambiente em que ela foi criada.
  6. 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
  7. 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.
  8. 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
  9. 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.
  10. Arrow Functions var repete = function(valor){ return valor; }; var

    dobro = function(n) { return n * 2; }; var repete = valor => valor; var dobro = n => n * 2;
  11. 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”
  12. 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)