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

Programação Funcional e o JavaScript

Programação Funcional e o JavaScript

* Palestra feita com o @rafael_sps

Programação Funcional é um paradigma bastante em voga nos dias de hoje. O conceito é bastante antigo, vem lá do Lisp, e é embasado em cima de avaliações de funções matemáticas. Discutiremos os conceitos da Programação Funcional, suas "regras de ouro" e algumas das funções mais úteis utilizando JavaScript.

More Decks by Evandro Leopoldino Gonçalves

Other Decks in Programming

Transcript

  1. Quem somos - Rafael Specht da Silva (@rafael_sps) Desenvolvedor Web

    Freelancer - Evandro Leopoldino Gonçalves (@evandrolg) Engenheiro de Software, Grupo RBS
  2. Imperativa - Variáveis/Estados mutáveis. - Comandos sequenciais. - Estruturas de

    controle, como if-then-else, loops, break, continue, return.
  3. Funcional - Estruturas de controle e operações abstraídas como funções.

    - Variáveis e estados imutáveis. - Uso de funções que dependem apenas dos valores passados por parâmetro, e não do estado da aplicação. - Uso de funções que abstraem outras funções.
  4. Funções em JS São funções de primeira classe ou “Podemos

    fazer com funções o que poderíamos fazer com números”
  5. var sum = function (a, b) { return a +

    b(); } sum (4, two); //6
  6. Currying "Usada para transformar uma função com n argumentos em

    uma outra função com argumentos simples." (Milfont)
  7. Callback Consiste em passar a função como parâmetro para outra

    função que mais tarde executará a função recebida.
  8. var bt = document.getElementById('bt'); var onClick = function() { console.log(‘clicked’,

    this); }; onClick() // ‘clicked’ [object Window] bt.addEventListener('click', onClick, false); // ‘clicked’ [object HTMLSelectElement]
  9. Closures - É uma inner function que acessa também as

    variáveis e parametros da função pai. - Callbacks podem ser closures também!
  10. Self-Memoizing Function É uma técnica que consiste em projetar uma

    função capaz de cachear valores já retornados
  11. var getElement = function(val) { return getElement.cache[val] = getElement.cache[val] ||

    document.getElementById(val); }; getElements.cache = {}; http://jsperf.com/dom-case-perf
  12. Map Cria um novo array onde cada item sofre uma

    transformação de acordo com o retorno da função passada.
  13. var updatePath = function(listScripts, path) { return listScripts.map(function(value) { return

    path + value; }); }; var scripts = ['script-1.js', 'script-2.js', 'script-3.js']; updatePath(scripts, ‘scripts/’); //[‘scripts/script-1.js’, ‘scripts/script-2.js’, ‘scripts/script-3.js’]
  14. var convertObjToArray = function(obj) { return [].map.call(obj, function (element) {

    return element; }); }; var box = document.querySelectorAll('.box'); var listBox = turnObjToArray(box);
  15. var boxes = document.querySelectorAll('.box'); var list = [].map.call(boxes, function(value) {

    return value; }); var redBoxes = list.filter(function(el) { return el.className.indexOf('red') !== -1; });
  16. Where Itera um array retornando um array de itens que

    tem os mesmos valores do objeto passado como parâmetro
  17. var listOfPlays = [ {title:‘Cymbeline’, author: ‘Shakespeare’, year: 1611}, {title:

    ‘The Tempest’, author: ‘Shakespeare’, year: 1611}, {title: ‘Macbeth’, author: ‘Shakespeare’, year: 1623}]; _.where(listOfPlays, { author: ‘Shakespeare’, year: 1611 });
  18. var stooges = [ {name: ‘moe’, age: 40}, {name: ‘larry’,

    age: 50}, {name: ‘curly’, age: 60} ]; _.pluck(stooges, ‘name’); // [‘moe’, ‘larry’, ‘curly’]