A dica de hoje é sobre High-order Functions, que são funções que recebem ou retornam funções. Nós temos alguns tipos diferentes, como por exemplo vetor, map e forEach, elas são high-order functions porque podemos passar um método que ele vai iterar dando o console.log.
const vetor = [1, 2, 3]
vetor.forEach((item) => console.log(item))
Perceba que estamos passando uma função para essa outra função que é uma high-order function, a função que passamos para ela chamamos de firt order function. Com ela conseguimos construir nossas próprias funções high-order. Por exemplo, caso queiramos fazer uma função mathOperator, que pega dois termos e retorna os números, e uma função que faz a operação que eu quero:
function mathOrder(num1, num2, op) {
return op(num1, num2)
}
console.log(mathOperator(1, 2, (num1, num2) => num1 + num2))
Então eu quis que essa high-order function chame o num1 e num2 e retorne a soma das duas.
Não necessariamente as high-order functions precisam ser puras, a única regra que temos é que ela recebe ou retorna uma função. No exemplo que fizemos, o op naquele momento é uma função. É importante lembrar que em JavaScript funções podem ser colocadas dentro de variáveis, por isso é possível criar high-order functions, uma coisa que não é tão simples de se fazer em Java por exemplo.
Lembrando que eu utilizei arrow function para facilitar mas eu poderia também fazer a operação:
function mathOrder(num1, num2, op) {
return op(num1, num2)
}
function operadorMult(num1, num2) {
return (
num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1num1\ *
num2
)
}
console.log(mathOperator(1, 2, (num1, num2) => num1 + num2))
console.log(mathOperator(1, 2, operadorMult))
High-order functions é um conceito muito importante para podermos injetar comportamento em uma função, esse é o grande ponto delas. Podemos compor funções que são muito mais simples, e isso é muito importante não só em programação funcional mas principalmente para simplificar as funções.
Confira o video:
Curta o DevPleno no Facebook, se inscreva no canal no YouTube e cadastre seu e-mail para não perder as atualizações. Abraço!
Mestre em Sistemas de Informação pela USP e criador do DevPleno. Iniciou sua carreira como professor com apenas 18 anos em um curso técnico, foram 11 anos em sala de aula formando desenvolvedores fullstack no sul de Minas Gerais.