High-order Function Find

High-order Function Find

Tulio Faria
Tulio Faria2 de agosto de 2017
Já falamos sobre map, reduce e filter, hoje vou mostrar uma high-order function bem parecida chamada de find. Vamos aproveitar o exemplo do reduce:

const carrinho = [ { id: 1, preco: 2, qtd: 2, estoque: 10 }, { id: 1, preco: 3, qtd: 5, estoque: 2 } ] const subtotal = (item) => item.preço * item.qtd const filtroEmEstoque = (item) => item.estoque * item.qtd const soma = (soma, subtotal) => subtotal + soma const total = carrinho.filter(filtroEmEstoque).map(subtotal).reduce(soma, 0) const produtoId1 = (item) => item.id === 1 const produtoId1Retorno = carrinho.find(produtoId1) console.log(produtoId1Retorno)

Perceba que pedimos o produto com o id 1, mandamos procurar com o find no carrinho e buscamos esse ID 1. Uma coisa interessante e comum é fazermos como fizemos em cima, até meu filtro ser uma variável e apenas fazermos o retorno. Agora imaginem que a gente queira parametrizar ainda mais, um conceito bem legal é a seguinte:

const idEquals = (id, item) => item.id === id const idEquals1 = carrinho.find(produtoId1) console.log(produtoId1Retorno)

Perceba que eu fiz uma arrow function e nela estou passando o ID com o item que estou iterando. Quando for criar mais filtros, posso usar essa função de idEquals e fixar quem eu quero nesse primeiro parâmetro.

const idEquals = (id, item) => item.id === id const idEquals1 = idEquals.bind(null, 1) const idEquals1 = carrinho.find(produtoId1) console.log(produtoId1Retorno)

Essa nova função que eu criei sempre terá um do ID fixo, então quando eu fizer:

console.log(carrinho.find(idEquals1)

Eu já sei que estou travando o ID em um, criando uma nova função a partir da função que eu já tinha. A vantagem disso é que vamos saindo de funções mais genéricas para funções mais específicas que também são fáceis de testar, deixando o código cada vez mais legível. Óbvio que esse exemplo é bem simples, mas poderíamos travar uma dependência com um banco, por exemplo.
Podemos usar o bind junto com find e qualquer outra função para travar algumas variáveis criando funções novas que travam alguns desses valores.
Confira o video:
q1rIICZaxTI
Assistir vídeo
o DevPleno no Facebook, inscreva-se no canal e cadastre seu e-mail para não perder nenhuma novidade. Deixe suas dúvidas e sugestões nos comentários. Abraço!
Tulio Faria
Autor
Tulio Faria2 de agosto de 2017

Últimas do Blog