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. Perceba que estamos passando uma função para essa outra…
por: Tulio Faria
Categoria: DicasVideo-Tutorial
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 num1\*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.