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
- Funciones como Argumentos: Una función de orden superior puede recibir una o más funciones como parámetros.
- Funciones que Devuelven Funciones: Una función de orden superior puede devolver una nueva función.
- 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
- ¿Qué es JavaScript?
- Configuración de tu Entorno de Desarrollo
- Tu Primer Programa en JavaScript
- Sintaxis y Conceptos Básicos de JavaScript
- Variables y Tipos de Datos
- Operadores Básicos
Módulo 2: Estructuras de Control
- Sentencias Condicionales
- Bucles: for, while, do-while
- Sentencias Switch
- Manejo de Errores con try-catch
Módulo 3: Funciones
- Definición y Llamada de Funciones
- Expresiones de Función y Funciones Flecha
- Parámetros y Valores de Retorno
- Ámbito y Closures
- Funciones de Orden Superior
Módulo 4: Objetos y Arrays
- Introducción a los Objetos
- Métodos de Objeto y la Palabra Clave 'this'
- Arrays: Conceptos Básicos y Métodos
- Iteración sobre Arrays
- Desestructuración de Arrays
Módulo 5: Objetos y Funciones Avanzadas
- Prototipos y Herencia
- Clases y Programación Orientada a Objetos
- Módulos e Importación/Exportación
- JavaScript Asíncrono: Callbacks
- Promesas y Async/Await
Módulo 6: El Modelo de Objetos del Documento (DOM)
- Introducción al DOM
- Selección y Manipulación de Elementos del DOM
- Manejo de Eventos
- Creación y Eliminación de Elementos del DOM
- Manejo y Validación de Formularios
Módulo 7: APIs del Navegador y Temas Avanzados
- Almacenamiento Local y de Sesión
- Fetch API y AJAX
- WebSockets
- Service Workers y Aplicaciones Web Progresivas (PWAs)
- Introducción a WebAssembly
Módulo 8: Pruebas y Depuración
- Depuración de JavaScript
- Pruebas Unitarias con Jest
- Pruebas de Integración
- Pruebas de Extremo a Extremo con Cypress
Módulo 9: Rendimiento y Optimización
- Optimización del Rendimiento de JavaScript
- Gestión de Memoria
- Manipulación Eficiente del DOM
- Carga Perezosa y División de Código
Módulo 10: Frameworks y Librerías de JavaScript
- Introducción a React
- Gestión de Estado con Redux
- Conceptos Básicos de Vue.js
- Conceptos Básicos de Angular
- Elegir el Framework Adecuado