Funções de Ordem Superior

Em JavaScript, uma função de ordem superior (Higher Order Functions - HOC) é uma função que recebe uma função como argumento ou retorna uma função como resultado. Em outras palavras, uma função de ordem superior é uma função que opera sobre outras funções.

Para entender as funções de ordem superior, vamos começar com um exemplo. Digamos que você queira escrever uma função que receba um array de números e retorne um novo array com todos os números dobrados. Você poderia escrever uma função como esta:

Loading Code . . .

Esta função recebe um array de números como argumento e retorna um novo array com todos os números dobrados. É uma função pura porque não modifica nenhum dado fora de seu escopo e sua saída depende apenas de sua entrada.

Essa função funciona, mas e se você quiser triplicar os números em vez de duplicá-los? Ou se você quiser elevar os números ao quadrado? Você teria que escrever uma nova função para cada caso.

É aqui que entram as funções de ordem superior! Nesse caso, em vez de escrever uma nova função para cada caso, você pode escrever uma função que recebe outra função como argumento e a utiliza para transformar os números. Aqui está um exemplo:

Loading Code . . .

Agora, temos uma função chamada transformNumbers que recebe umo array de números e uma função como argumentos. A função então itera sobre o array e aplica a função em cada número. Ele retorna um novo array com os números transformados.

Também temos três funções chamadas double, triple e square que recebem um número como argumento e retornam o número dobrado, triplicado e ao quadrado, respectivamente.

Agora, podemos usar a função transformNumbers para transformar os números de diferentes maneiras:

Loading Code . . .

No exemplo acima, usamos a função transformNumbers para transformar os números de três maneiras diferentes: duplicar, triplicar e elevar ao quadrado. Passamos as funções double, triple e square como argumentos para a função transformNumbers.

Portanto, neste exemplo, a função transformNumbers é uma função de ordem superior porque recebe uma função como argumento.

Por que usar funções de ordem superior?

As funções de ordem superior são úteis porque nos permitem escrever funções mais genéricas que podem ser usadas para resolver uma variedade de problemas. Por exemplo, a função transformNumbers pode ser usada para transformar os números da maneira que quisermos, desde que passemos uma função que transforme os números como argumento.

Por outro lado, se tivéssemos escrito uma função para cada caso, teríamos que escrever uma nova função para cada novo caso, repetindo muito código (como o loop e o método push). Isso tornaria nosso código menos sustentável.

Desafio de código

Escreva uma função applyAndIncrement que receba dois parâmetros:

  • value (um número)
  • func (uma função de ordem superior que recebe um número e retorna um número)

A função applyAndIncrement deve aplicar a função func a value e então retornar o resultado incrementado em 1.

Por exemplo:

Loading Code . . .

No primeiro exemplo, applyAndIncrement(3, addTwo) deve retornar 6, que é o resultado de addTwo(3) (que é 5) incrementado por 1.

No segundo exemplo, applyAndIncrement(3, multipleByFive) deve retornar 16, que é o resultado de multiplyByFive(3) (que é 15) incrementado por 1.

Loading...
Loading...
Loading...

© 2024 - ®Mewters