Les funcions d'ordre superior són un concepte fonamental en JavaScript i altres llenguatges de programació funcionals. Aquest tipus de funcions poden rebre altres funcions com a arguments i/o retornar funcions com a resultat. Això permet una gran flexibilitat i potència en la programació, ja que permet crear funcions més abstractes i reutilitzables.

Què és una Funció d'Ordre Superior?

Una funció d'ordre superior és una funció que compleix almenys una de les següents condicions:

  1. Rep una o més funcions com a arguments.
  2. Retorna una funció com a resultat.

Exemples de Funcions d'Ordre Superior

Exemple 1: Funció que rep una altra funció com a argument

function saluda(nom) {
    return `Hola, ${nom}!`;
}

function processaUsuari(nom, funcio) {
    return funcio(nom);
}

console.log(processaUsuari("Anna", saluda)); // Sortida: Hola, Anna!

En aquest exemple, processaUsuari és una funció d'ordre superior perquè rep saluda com a argument.

Exemple 2: Funció que retorna una altra funció

function creaSalutacio(salutacio) {
    return function(nom) {
        return `${salutacio}, ${nom}!`;
    };
}

const saludaEnCatala = creaSalutacio("Hola");
console.log(saludaEnCatala("Pere")); // Sortida: Hola, Pere!

En aquest cas, creaSalutacio és una funció d'ordre superior perquè retorna una funció.

Funcions d'Ordre Superior en JavaScript

JavaScript inclou diverses funcions d'ordre superior predefinides que són molt útils per treballar amb arrays i altres col·leccions. Algunes de les més comunes són:

  • forEach
  • map
  • filter
  • reduce
  • some
  • every

forEach

La funció forEach executa una funció proporcionada una vegada per cada element de l'array.

const numeros = [1, 2, 3, 4, 5];

numeros.forEach(function(numero) {
    console.log(numero);
});
// Sortida: 1 2 3 4 5

map

La funció map crea un nou array amb els resultats de la funció proporcionada aplicada a cada element de l'array original.

const numeros = [1, 2, 3, 4, 5];
const dobles = numeros.map(function(numero) {
    return numero * 2;
});

console.log(dobles); // Sortida: [2, 4, 6, 8, 10]

filter

La funció filter crea un nou array amb tots els elements que compleixen la condició de la funció proporcionada.

const numeros = [1, 2, 3, 4, 5];
const parells = numeros.filter(function(numero) {
    return numero % 2 === 0;
});

console.log(parells); // Sortida: [2, 4]

reduce

La funció reduce aplica una funció a un acumulador i a cada element de l'array (de dreta a esquerra) per reduir-lo a un únic valor.

const numeros = [1, 2, 3, 4, 5];
const suma = numeros.reduce(function(acumulador, numero) {
    return acumulador + numero;
}, 0);

console.log(suma); // Sortida: 15

Exercicis Pràctics

Exercici 1: Utilitzant map

Crea una funció que rebi un array de números i retorni un nou array amb cada número elevat al quadrat.

function elevaAlQuadrat(nums) {
    return nums.map(function(num) {
        return num * num;
    });
}

// Prova la funció
const nums = [1, 2, 3, 4, 5];
console.log(elevaAlQuadrat(nums)); // Sortida: [1, 4, 9, 16, 25]

Exercici 2: Utilitzant filter

Crea una funció que rebi un array de números i retorni un nou array amb només els números imparells.

function filtraImparells(nums) {
    return nums.filter(function(num) {
        return num % 2 !== 0;
    });
}

// Prova la funció
const nums = [1, 2, 3, 4, 5];
console.log(filtraImparells(nums)); // Sortida: [1, 3, 5]

Exercici 3: Utilitzant reduce

Crea una funció que rebi un array de números i retorni la suma de tots els números.

function sumaTotal(nums) {
    return nums.reduce(function(acumulador, num) {
        return acumulador + num;
    }, 0);
}

// Prova la funció
const nums = [1, 2, 3, 4, 5];
console.log(sumaTotal(nums)); // Sortida: 15

Conclusió

Les funcions d'ordre superior són una eina poderosa en JavaScript que permeten escriure codi més abstracte, modular i reutilitzable. Comprendre com utilitzar aquestes funcions pot millorar significativament la teva capacitat per treballar amb arrays i altres col·leccions de dades. Practica amb els exemples i exercicis proporcionats per consolidar els teus coneixements.

JavaScript: De Principiant a Avançat

Mòdul 1: Introducció a JavaScript

Mòdul 2: Estructures de Control

Mòdul 3: Funcions

Mòdul 4: Objectes i Arrays

Mòdul 5: Objectes i Funcions Avançades

Mòdul 6: El Model d'Objectes del Document (DOM)

Mòdul 7: APIs del Navegador i Temes Avançats

Mòdul 8: Proves i Depuració

Mòdul 9: Rendiment i Optimització

Mòdul 10: Frameworks i Llibreries de JavaScript

Mòdul 11: Projecte Final

© Copyright 2024. Tots els drets reservats