Funciones
Funciones Fundamental
Section titled “Funciones ”Declaración y expresión Básico
Section titled “Declaración y expresión ”Declaración de función
Section titled “Declaración de función”// Declaración de funciónfunction saludar(nombre) { return "Hola " + nombre;}
// Llamada a la funciónsaludar("María"); // "Hola María"Expresión de función
Section titled “Expresión de función”// Expresión de funciónconst saludar = function(nombre) { return "Hola " + nombre;};
// Función anónimaconst suma = function(a, b) { return a + b; };Funciones flecha Moderno
Section titled “Funciones flecha ”// Función flecha básicaconst sumar = (a, b) => a + b;
// Con bloque de códigoconst saludar = nombre => { const mensaje = "Hola " + nombre; return mensaje;};
// Sin parámetrosconst saludo = () => "Hola Mundo";
// Un solo parámetroconst cuadrado = x => x * x;Parámetros por defecto y rest Avanzado
Section titled “Parámetros por defecto y rest ”Parámetros por defecto
Section titled “Parámetros por defecto”function saludar(nombre = "Usuario") { return "Hola " + nombre;}
saludar(); // "Hola Usuario"saludar("María"); // "Hola María"Parámetros rest
Section titled “Parámetros rest”function sumar(...numeros) { return numeros.reduce((total, num) => total + num, 0);}
sumar(1, 2, 3, 4); // 10Parámetros opcionales
Section titled “Parámetros opcionales”function configurar(opciones) { // Si opciones es undefined o null, se usa un objeto vacío const config = opciones ?? {};
// Acceso seguro a propiedades que podrían no existir const puerto = config?.puerto ?? 8080; const host = config?.host ?? 'localhost';
return { puerto, host };}
// Ejemplos de usoconsole.log(configurar()); // { puerto: 8080, host: 'localhost' }console.log(configurar({ puerto: 3000 })); // { puerto: 3000, host: 'localhost' }console.log(configurar({ host: '127.0.0.1' })); // { puerto: 8080, host: '127.0.0.1' }Closures Avanzado
Section titled “Closures ”function crearContador() { let contador = 0; return { incrementar: () => ++contador, obtenerValor: () => contador };}
const contador = crearContador();contador.incrementar(); // 1contador.incrementar(); // 2contador.obtenerValor(); // 2IIFE (Immediately Invoked Function Expression) Avanzado
Section titled “IIFE (Immediately Invoked Function Expression) ”(function() { const mensaje = "Este código se ejecuta inmediatamente"; console.log(mensaje);})();
// Versión con arrow function(() => { const config = { api: "https://api.ejemplo.com", version: "1.0" }; // Hacer algo con la configuración})();Mejores prácticas Recomendado
Section titled “Mejores prácticas ”Nombres descriptivos
Section titled “Nombres descriptivos”// ❌ Malofunction fn(x, y) { return x + y;}
// ✅ Buenofunction sumarNumeros(numero1, numero2) { return numero1 + numero2;}Una función, una tarea
Section titled “Una función, una tarea”// ❌ Malofunction procesarUsuario(usuario) { validarDatos(usuario); guardarEnDB(usuario); enviarEmail(usuario);}
// ✅ Buenofunction validarUsuario(usuario) { return usuario.nombre && usuario.email;}
function guardarUsuario(usuario) { return db.usuarios.save(usuario);}
function notificarUsuario(usuario) { return enviarEmail(usuario.email, 'Bienvenido');}Argumentos claros
Section titled “Argumentos claros”// ❌ Malofunction configurar(x, y, z) { // ¿Qué significan x, y, z?}
// ✅ Buenofunction configurarAplicacion({ puerto = 8080, entorno = 'desarrollo', debug = false} = {}) { // Configuración con parámetros nombrados}Evitar efectos secundarios
Section titled “Evitar efectos secundarios”// ❌ Malolet total = 0;function sumar(numero) { total += numero; // Modifica variable externa}
// ✅ Buenofunction sumar(total, numero) { return total + numero; // Sin efectos secundarios}Manejo de errores
Section titled “Manejo de errores”function dividir(a, b) { if (b === 0) { throw new Error("No se puede dividir por cero"); } return a / b;}
🐝