SlideShare une entreprise Scribd logo
1  sur  62
Programação funcional
E um pouco de JavaScript
Deivis C. Wingert
/DeivisWingert
/Deivis
“Programação funcional, assim como a orientação a
objetos, é uma forma de se pensar em como resolver
problemas”
Hoje
Nuvem
Servidores distribuídos
Programação concorrente
E funcional funciona ?
• A programação funcional ficou por anos fechada
ao meio acadêmico devido a complexidade
• Mas a cada dia isso vem mudando mais, as
linguagens funcionais como Erlang, Clojure,
Haskel, F# entre outras veem sendo cada vez
mais utilizadas
• Pode ser utilizada em linguagens multi-paradigma
como Scala e JavaScript.
Por que funcional ?
• Por que isso agora ? Se já convivo tanto com a
orientação a objetos no JavaScript
• O JavaScript não é nativamente orientado a
objetos e nem puramente funcional
Pedras no caminho
• A programação funcional vai parecer uma
loucura no começo pois estamos em nossa
maioria acostumados a trabalhar com a
orientação a objetos.
• Para se criar bons sistemas utilizando
JavaScript sobre o paradigma funcional é
necessária uma bela curva de aprendizado.
Um pouco de história
O que faz uma linguagem ser
funcional?
Funções == objeto
Imutabilidade
Recursividade
Lambda
Independência de estado
O que faz uma linguagem ser
funcional?
• Função é a menor parte de um programa
• Na programação funcional nos preocupamos
em dizer a maquina o que queremos fazer e
não como iremos fazer.
O que faz uma linguagem ser
funcional?
• A execução das expressões é controlada por
condições e recursividade e não iterações
diretas como ocorre nos paradigmas
imperativos.
• Variáveis e estados imutáveis.
Sobre o paradigma
• Funções não dependem do estado do sistema.
• Lambda: de maneira simples, é o conceito de
funções recebendo e retornando funções ou
resultados das mesmas, conceito oriundo do
cálculo Lambda do matemático Alonzo
Church.
Vantagens
Modularidade
Menos sujeito a efeitos colaterais
Menor dependência entre
módulos
Vantagens
Reusabilidade
Programação concorrente
É matematicamente correto
O JavaScript é funcional ?
• Em parte, pois sua construção
permite a utilização tanto de
programação funcional quanto de
orientação a objetos.
Tipos de funções
Funções anônimas
• São simplesmente funções que não tem um
nome definido.
• Sua utilização é bem comum quando temos
apenas uma chamada a esta determinada
função ou quando a retornamos como
parâmetro.
Funções anônimas
Funções auto invocáveis
• São funções que ao serem criadas já executam
• Mantem as suas variáveis com acesso apenas
interno, isso inclui funções internas.
• Para disponibilizar algum valor pode-se utilizar
o return desta função
Funções auto invocáveis
Closures
- Funções que possuem funções filhas que tem
acesso as variáveis do escopo da função pai
- Você pode salvar algum dado dentro de uma
função que é apenas acessível à função de
retorno , isto é, a função retornada mantém seu
ambiente de execução.
- Estão presentes em qualquer linguagem
funcional.
Clousures
Funções de primeira classe
- Funções mais simples que podem ser
representadas apenas com números.
- São atribuídas a uma variável
- Não e não recebem parâmetros complexos
Funções de primeira classe
Funções de alta ordem
- Funções mais complexas onde pode haver
uma ou mais funções internas.
- Podem ter escopo compartilhado.
- Recebem funções e retornam funções
Funções de alta ordem
Funções puras
Funções puras
- Funções onde dado um ou mais parâmetros de
entrada a será a mesma para toas as vezes que
estes parâmetros forem recebidos.
- Não dependem de variáveis externas, recebem
dados e retornam dados.
- Não causa nem um tipo de efeito colateral
Funções puras
Funções puras
Algumas ferramentas
Callbacks
Map
Filter
Reduce
ForEach
Algumas ferramentas
• O JavaScript desde sua versão 5.1 de 2011,
ECMA-262 passou a implementar, map, filter,
reduce e forEach como protótipos de array
Callbacks
• São funções passadas como parâmetro, para
que a função que recebeu o call-back a use
• Quem nunca usou uma chamada de Ajax da
jQuery ?
Callback
Map
- Itera um Array executando uma função de call-
back sobre cada item do Array, retornando uma
lista nova, normalmente modificada.
- A função map() recebe dois parâmetros , onde
primeiro parâmetro é uma função de call-back.
- E o segundo é opcional, é o valor a ser utilizado
como o this no momento da execução da função
callback.
Map
- O segundo parâmetro é utilizado para
especificar o valor para o escopo da função.
- O mais importante são os parâmetros
passados para a função de call-back, o
elemento do Array em si, o índice do Array, e
todo o Array (contexto)
Map
Filter
- Os parâmetros da função filter são exatamente
os mesmos da função .map().
- E como o nome sugere ela filtra alguma coisa
em um array.
- O filtro é criado a partir da logica da função de
call-back passada como parâmetro.
Filter
Reduce
- Itera um Array da mesma maneira que o map,
mas retorna a soma dos resultados da função
de call-back recebida.
- Assim como map, reduce recebe dois
argumentos. A função de call-back e o
argumento opcional para o this.
Reduce
- O primeiro é novamente a função de callback,
que será chamada para cada elemento no
Array.
- O segundo parâmetro é o initialValue que será
utilizado para somar ao próximo valor. Caso
não seja informado o primeiro valor do array é
o initialValue
Reduce
ForEach
• É uma versão não pura do .map(), que como
este recebe uma função de call-back como
parâmetro e para esta passa o item corrente,
índice e uma referencia ao próprio array.
• Mas diferentemente do map, o forEach não
tem um retorno.
ForEach
• Funciona basicamente como um for
Menos importante, mas mesmo assim
importantes
• Concat
• Reverse
• Sort
• Everey
• Some
• Flat
Manipulando funções
apply & call
• Os métodos call e apply são muito
semelhantes, ambos chamam uma função.
• Diferenciam-se pelos parâmetros recebidos
• Por padrão possuem uma variável interna
chamada arguments que recebe os
parâmetros passados além do this.
apply & call
apply & call
Biding
• É uma função que como o call, recebe this
como primeiro parâmetro e uma sequencia de
parâmetros.
• A grande diferença é que o bind retorna uma
nova função e não o resultado da chamada
como call e apply
Biding
Biding
Fábrica de funções
• São clousures que ajudam a organiza o
processo de funções que criam outras
funções.
Fábrica de funções
Partial application
• Partial application é o processo de vincular
um ou mais valores a um ou mais parâmetros
de uma função que retorna outra função que
irá aceitar os valores que não foram
vinculados ainda.
• Uma maneira bonita de criar funções que
recebem parâmetros opcionais
Partial application
Partial application
Partial application
Currying
- Em linhas gerais currying é o processo de
transformar uma função com muitos
argumentos em uma ou mais funções menores
e mais simples.
- Não afeta a função simplificada
Currying
Exemplos
/Deivis/Functional-Programming
Perguntas ?
Obrigado

Contenu connexe

Tendances (20)

Funcao PHP
Funcao PHPFuncao PHP
Funcao PHP
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Haskell
HaskellHaskell
Haskell
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
Padrões de projeto em linguagens funcionais
Padrões de projeto em linguagens funcionaisPadrões de projeto em linguagens funcionais
Padrões de projeto em linguagens funcionais
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
PHP - Arrays
PHP - ArraysPHP - Arrays
PHP - Arrays
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Algoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de stringsAlgoritmos e Programação: Manipulação de strings
Algoritmos e Programação: Manipulação de strings
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Funções em C
Funções em CFunções em C
Funções em C
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Scheme
SchemeScheme
Scheme
 
Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05Programação Estruturada 2 - Aula 05
Programação Estruturada 2 - Aula 05
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 

Similaire à JavaScript funcional

Breve introdução a programação funcional com JavaScript
Breve introdução a programação funcional com JavaScriptBreve introdução a programação funcional com JavaScript
Breve introdução a programação funcional com JavaScriptDeivis Wingert
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcionalGabriel Schade Cardoso
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdfGabrielEduardo16342
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorFelipe Hummel
 
Funções PHP - Criação de sites II
Funções PHP - Criação de sites II Funções PHP - Criação de sites II
Funções PHP - Criação de sites II info_cimol
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...tdc-globalcode
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalDayvson Lima
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Tchelinux
 

Similaire à JavaScript funcional (20)

Breve introdução a programação funcional com JavaScript
Breve introdução a programação funcional com JavaScriptBreve introdução a programação funcional com JavaScript
Breve introdução a programação funcional com JavaScript
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
Java8
Java8Java8
Java8
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 
Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
Por um Java mais funcional
Por um Java mais funcionalPor um Java mais funcional
Por um Java mais funcional
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Aula05-JavaScript
Aula05-JavaScriptAula05-JavaScript
Aula05-JavaScript
 
Funções PHP - Criação de sites II
Funções PHP - Criação de sites II Funções PHP - Criação de sites II
Funções PHP - Criação de sites II
 
es6
es6es6
es6
 
Es6
Es6Es6
Es6
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
Java 8 e futuro
Java 8 e futuroJava 8 e futuro
Java 8 e futuro
 
Aula 4
Aula 4Aula 4
Aula 4
 

JavaScript funcional

  • 1. Programação funcional E um pouco de JavaScript
  • 3. “Programação funcional, assim como a orientação a objetos, é uma forma de se pensar em como resolver problemas”
  • 5. E funcional funciona ? • A programação funcional ficou por anos fechada ao meio acadêmico devido a complexidade • Mas a cada dia isso vem mudando mais, as linguagens funcionais como Erlang, Clojure, Haskel, F# entre outras veem sendo cada vez mais utilizadas • Pode ser utilizada em linguagens multi-paradigma como Scala e JavaScript.
  • 6. Por que funcional ? • Por que isso agora ? Se já convivo tanto com a orientação a objetos no JavaScript • O JavaScript não é nativamente orientado a objetos e nem puramente funcional
  • 7. Pedras no caminho • A programação funcional vai parecer uma loucura no começo pois estamos em nossa maioria acostumados a trabalhar com a orientação a objetos. • Para se criar bons sistemas utilizando JavaScript sobre o paradigma funcional é necessária uma bela curva de aprendizado.
  • 8. Um pouco de história
  • 9. O que faz uma linguagem ser funcional? Funções == objeto Imutabilidade Recursividade Lambda Independência de estado
  • 10. O que faz uma linguagem ser funcional? • Função é a menor parte de um programa • Na programação funcional nos preocupamos em dizer a maquina o que queremos fazer e não como iremos fazer.
  • 11. O que faz uma linguagem ser funcional? • A execução das expressões é controlada por condições e recursividade e não iterações diretas como ocorre nos paradigmas imperativos. • Variáveis e estados imutáveis.
  • 12. Sobre o paradigma • Funções não dependem do estado do sistema. • Lambda: de maneira simples, é o conceito de funções recebendo e retornando funções ou resultados das mesmas, conceito oriundo do cálculo Lambda do matemático Alonzo Church.
  • 13. Vantagens Modularidade Menos sujeito a efeitos colaterais Menor dependência entre módulos
  • 15. O JavaScript é funcional ? • Em parte, pois sua construção permite a utilização tanto de programação funcional quanto de orientação a objetos.
  • 17. Funções anônimas • São simplesmente funções que não tem um nome definido. • Sua utilização é bem comum quando temos apenas uma chamada a esta determinada função ou quando a retornamos como parâmetro.
  • 19. Funções auto invocáveis • São funções que ao serem criadas já executam • Mantem as suas variáveis com acesso apenas interno, isso inclui funções internas. • Para disponibilizar algum valor pode-se utilizar o return desta função
  • 21. Closures - Funções que possuem funções filhas que tem acesso as variáveis do escopo da função pai - Você pode salvar algum dado dentro de uma função que é apenas acessível à função de retorno , isto é, a função retornada mantém seu ambiente de execução. - Estão presentes em qualquer linguagem funcional.
  • 23. Funções de primeira classe - Funções mais simples que podem ser representadas apenas com números. - São atribuídas a uma variável - Não e não recebem parâmetros complexos
  • 25. Funções de alta ordem - Funções mais complexas onde pode haver uma ou mais funções internas. - Podem ter escopo compartilhado. - Recebem funções e retornam funções
  • 28. Funções puras - Funções onde dado um ou mais parâmetros de entrada a será a mesma para toas as vezes que estes parâmetros forem recebidos. - Não dependem de variáveis externas, recebem dados e retornam dados. - Não causa nem um tipo de efeito colateral
  • 32. Algumas ferramentas • O JavaScript desde sua versão 5.1 de 2011, ECMA-262 passou a implementar, map, filter, reduce e forEach como protótipos de array
  • 33. Callbacks • São funções passadas como parâmetro, para que a função que recebeu o call-back a use • Quem nunca usou uma chamada de Ajax da jQuery ?
  • 35. Map - Itera um Array executando uma função de call- back sobre cada item do Array, retornando uma lista nova, normalmente modificada. - A função map() recebe dois parâmetros , onde primeiro parâmetro é uma função de call-back. - E o segundo é opcional, é o valor a ser utilizado como o this no momento da execução da função callback.
  • 36. Map - O segundo parâmetro é utilizado para especificar o valor para o escopo da função. - O mais importante são os parâmetros passados para a função de call-back, o elemento do Array em si, o índice do Array, e todo o Array (contexto)
  • 37. Map
  • 38. Filter - Os parâmetros da função filter são exatamente os mesmos da função .map(). - E como o nome sugere ela filtra alguma coisa em um array. - O filtro é criado a partir da logica da função de call-back passada como parâmetro.
  • 40. Reduce - Itera um Array da mesma maneira que o map, mas retorna a soma dos resultados da função de call-back recebida. - Assim como map, reduce recebe dois argumentos. A função de call-back e o argumento opcional para o this.
  • 41. Reduce - O primeiro é novamente a função de callback, que será chamada para cada elemento no Array. - O segundo parâmetro é o initialValue que será utilizado para somar ao próximo valor. Caso não seja informado o primeiro valor do array é o initialValue
  • 43. ForEach • É uma versão não pura do .map(), que como este recebe uma função de call-back como parâmetro e para esta passa o item corrente, índice e uma referencia ao próprio array. • Mas diferentemente do map, o forEach não tem um retorno.
  • 45. Menos importante, mas mesmo assim importantes • Concat • Reverse • Sort • Everey • Some • Flat
  • 47. apply & call • Os métodos call e apply são muito semelhantes, ambos chamam uma função. • Diferenciam-se pelos parâmetros recebidos • Por padrão possuem uma variável interna chamada arguments que recebe os parâmetros passados além do this.
  • 50. Biding • É uma função que como o call, recebe this como primeiro parâmetro e uma sequencia de parâmetros. • A grande diferença é que o bind retorna uma nova função e não o resultado da chamada como call e apply
  • 53. Fábrica de funções • São clousures que ajudam a organiza o processo de funções que criam outras funções.
  • 55. Partial application • Partial application é o processo de vincular um ou mais valores a um ou mais parâmetros de uma função que retorna outra função que irá aceitar os valores que não foram vinculados ainda. • Uma maneira bonita de criar funções que recebem parâmetros opcionais
  • 59. Currying - Em linhas gerais currying é o processo de transformar uma função com muitos argumentos em uma ou mais funções menores e mais simples. - Não afeta a função simplificada

Notes de l'éditeur

  1. Um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis
  2. Evolução brutal do hardware, os computadores agora tem multiprocessadores sofisticados, multi-core com terabytes de memória. A internet e a computação na nuvem - Necessidade de reutilização do códgio
  3. Chat do facebook feito em Erlang
  4. ECMAScript does not contain proper classes such as those in C++, Smalltalk, or Java, but rather, supports constructors which create objects. In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behavior. In ECMAScript, the state and methods are carried by objects, and structure, behavior and state are all inherited
  5. A base do que hoje é a programação funcional foi criada paralelamente por Alan Turing e Alonzo Church, na década de 1930. A primeira linguagem de programação funcional criada para computadores foi LISP, desenvolvida por John McCarthy no Instituto de Tecnologia de Massachusetts (MIT) no fim dos anos 1950. Mas por um bom tempo este paradigma ficou fadado a ser apenas mais um tema acadêmico, por que ? De maneira rápida, sucinta e meio criacionista alguns fatos que sobrepujaram as linguagens funcionais. Computadores lentos e com pouca capacidade A linguagem Assembly deu origem a C, C para C++ e OO, e C++ e OO levando para Java – todas as imperativas e rápidas para os padrões de hardware da época O que levou o LISP e outras linguagens funcionais a serem deixadas de lado por sua lentidão. Cálculo labda !!!
  6. Função é a menor parte de um programa Na programação funcional nos preocupamos em dizer a maquina o que queremos fazer e não como iremos fazer. A execução das expressões é controlada por condições e recursividade e não iterações diretas como ocorre nos paradigmas imperativos. Variáveis e estados imutáveis. Funções não dependem do estado do sistema. Lambda: funções recebendo e retornando funções ou resultados das mesmas
  7. Cálculo Lambda
  8. Melhor modularidade Menos sujeito a efeitos colaterais Mais facilidade em resolver problemas de programação concorrente, devido a imutabilidade
  9. Melhor modularidade Menos sujeito a efeitos colaterais Mais facilidade em resolver problemas de programação concorrente, devido a imutabilidade - Você possui um controle a nível matemático do seu código, uma vez q este implemente os princípios da funcional.
  10. De acordo com a ECMA JS não é puramente orientado a objeto mas pode implementar OO por meio do padrão de protótipos. JS não contem classes como linguagens OO e nem tipagem forte No JS o estado e os métodos são transportados por objetos, estruturas, funções e o estado pode ser herdado ou passado a diante
  11. Self invoking Clousures High order Pure Anonymus Method chains Recursion Lazy evaluation
  12. Funções que possuem funções filhas que tem acesso as variáveis do escopo da função pai Você pode salvar algum dado dentro de uma função que é apenas acessível à função de retorno , isto é, a função retornada mantém seu ambiente de execução. Call-backs podem ser considerados clousures.
  13. Funções mais simples que podem ser representadas apenas com números. São atribuídas a uma variável Não e não recebem parâmetros complexos.
  14. Funções mais complexas onde pode haver uma ou mais funções internas. Podem ter escopo compartilhado. Recebem funções e retornam funções
  15. Funções onde dado um ou mais parâmetros de entrada a será a mesma para toas as vezes que estes parâmetros forem recebidos. Não dependem de variáveis externas, recebem dados e retornam dados. Não causa nem um tipo de efeito colateral 
  16. O js desde sua versão 5 de 2011, ECMA-262 passou a implementar, map, reduce e filter como protótipos de array Map. Itera um Array executando uma função de call-back sobre cada item do Array, retornando uma lista nova, normalmente modificada. A função map() recebe dois parâmetros , onde primeiro parâmetro é uma função de call-back. O segundo parâmetro é utilizado para especificar o valor para o escopo da função. O mais importante são os parâmetros passados para a função de call-back, o elemento do Array em si, o índice do Array, e todo o Array (contexto) . Filter Os parâmetros da função filter são exatamente os mesmos da função map(). E como o nome sugere ela filtra alguma coisa em um array. O filtro é criado a partir da logica da função de call-back passada como parâmetro. Reduce. Itera um Array da mesma maneira que o map, mas retorna a soma dos resultados da função de call-back recebida. Assim como map, reduce recebe dois argumentos. O primeiro é novamente a função de callback, que será chamada para cada elemento no Array. O segundo parâmetro é o initialValue que será utilizado para somar ao próximo valor. Caso não seja informado o primeiro valor do array é o initialValue.
  17. Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
  18. Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
  19. Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
  20. - Zip
  21. Recebe um valor para this e muitos argumentos
  22. O applay também recebe um valor para this, mas como segundo parâmetro recebe um array.
  23. - São super clousures que ajuam a organiza o processo de funções que criam outras funções - aqui chammos a bindSegundoArgumento para criar a nova função quando executamos quadradoDe, não estamos executando bindSegundoArgumento mas sim o resultado da função que passamos como parâmetro recebendo o valor passado para bindSegundoArgumento e o valor passado a quadradoDe como parâmetros
  24. Em linhas gerais currying é uma função com argumentos simples que simplifica outra função mais complexa. Não afeta a função simplificada
  25. Não esquecer: Teoria das categorias functors Monads Maybes Promises Lenses JQ is a Monad Herança de funções Mixins Padrão de estratégia