Introducción

Las funciones de orden superior son un concepto fundamental en JavaScript y en muchos otros lenguajes de programación funcional. Una función de orden superior es una función que puede tomar otras funciones como argumentos y/o devolver una función como resultado. Este concepto permite escribir código más modular y reutilizable.

Conceptos Clave

  1. Funciones como Argumentos: Una función de orden superior puede recibir una o más funciones como parámetros.
  2. Funciones que Devuelven Funciones: Una función de orden superior puede devolver una nueva función.
  3. Composición de Funciones: Permite combinar funciones simples para crear funciones más complejas.

Ejemplos Prácticos

Funciones como Argumentos

Las funciones de orden superior más comunes en JavaScript son map, filter y reduce.

Array.prototype.map()

El método map crea un nuevo array con los resultados de llamar a una función proporcionada en cada elemento del array que llama.

const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(function(num) {
    return num * 2;
});
console.log(doubled); // [2, 4, 6, 8, 10]

Array.prototype.filter()

El método filter crea un nuevo array con todos los elementos que pasen la prueba implementada por la función proporcionada.

const numbers = [1, 2, 3, 4, 5];
const evens = numbers.filter(function(num) {
    return num % 2 === 0;
});
console.log(evens); // [2, 4]

Array.prototype.reduce()

El método reduce aplica una función a un acumulador y a cada valor de un array (de izquierda a derecha) para reducirlo a un solo valor.

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce(function(acc, num) {
    return acc + num;
}, 0);
console.log(sum); // 15

Funciones que Devuelven Funciones

Una función de orden superior también puede devolver una nueva función.

function createMultiplier(multiplier) {
    return function(num) {
        return num * multiplier;
    };
}

const double = createMultiplier(2);
const triple = createMultiplier(3);

console.log(double(5)); // 10
console.log(triple(5)); // 15

Composición de Funciones

La composición de funciones es el proceso de combinar dos o más funciones para producir una nueva función.

function compose(f, g) {
    return function(x) {
        return f(g(x));
    };
}

function add2(x) {
    return x + 2;
}

function multiply3(x) {
    return x * 3;
}

const add2ThenMultiply3 = compose(multiply3, add2);

console.log(add2ThenMultiply3(5)); // 21

Ejercicios Prácticos

Ejercicio 1: Implementar map

Implementa tu propia versión del método map.

function myMap(array, callback) {
    const result = [];
    for (let i = 0; i < array.length; i++) {
        result.push(callback(array[i], i, array));
    }
    return result;
}

// Prueba tu implementación
const numbers = [1, 2, 3, 4, 5];
const doubled = myMap(numbers, function(num) {
    return num * 2;
});
console.log(doubled); // [2, 4, 6, 8, 10]

Ejercicio 2: Implementar filter

Implementa tu propia versión del método filter.

function myFilter(array, callback) {
    const result = [];
    for (let i = 0; i < array.length; i++) {
        if (callback(array[i], i, array)) {
            result.push(array[i]);
        }
    }
    return result;
}

// Prueba tu implementación
const numbers = [1, 2, 3, 4, 5];
const evens = myFilter(numbers, function(num) {
    return num % 2 === 0;
});
console.log(evens); // [2, 4]

Ejercicio 3: Implementar reduce

Implementa tu propia versión del método reduce.

function myReduce(array, callback, initialValue) {
    let accumulator = initialValue;
    for (let i = 0; i < array.length; i++) {
        accumulator = callback(accumulator, array[i], i, array);
    }
    return accumulator;
}

// Prueba tu implementación
const numbers = [1, 2, 3, 4, 5];
const sum = myReduce(numbers, function(acc, num) {
    return acc + num;
}, 0);
console.log(sum); // 15

Resumen

En esta sección, hemos aprendido sobre las funciones de orden superior en JavaScript. Hemos visto cómo estas funciones pueden recibir otras funciones como argumentos y/o devolver funciones. También hemos explorado ejemplos prácticos de métodos de array como map, filter y reduce, y cómo podemos implementar nuestras propias versiones de estos métodos. Las funciones de orden superior son una herramienta poderosa para escribir código más modular y reutilizable.

En el siguiente módulo, profundizaremos en los objetos y arrays, explorando cómo trabajar con estas estructuras de datos fundamentales en JavaScript.

JavaScript: De Principiante a Avanzado

Módulo 1: Introducción a JavaScript

Módulo 2: Estructuras de Control

Módulo 3: Funciones

Módulo 4: Objetos y Arrays

Módulo 5: Objetos y Funciones Avanzadas

Módulo 6: El Modelo de Objetos del Documento (DOM)

Módulo 7: APIs del Navegador y Temas Avanzados

Módulo 8: Pruebas y Depuración

Módulo 9: Rendimiento y Optimización

Módulo 10: Frameworks y Librerías de JavaScript

Módulo 11: Proyecto Final

© Copyright 2024. Todos los derechos reservados