$30 off During Our Annual Pro Sale. View Details »

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. Programação
    Funcional
    no JavaScript

    View Slide

  2. /GuilhermeFarias
    @guiky

    View Slide

  3. Multi-paradigma

    View Slide

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

    View Slide

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

    View Slide

  6. 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.

    View Slide

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

    View Slide

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

    View Slide

  9. 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.

    View Slide

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

    View Slide

  11. 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.

    View Slide

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

    View Slide

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

    View Slide

  14. 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

    View Slide

  15. 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.

    View Slide

  16. 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

    View Slide

  17. 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.

    View Slide

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

    View Slide

  19. 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”

    View Slide

  20. 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)

    View Slide

  21. Obrigado!

    View Slide