Taller 11 Parte 1: Ejercicios de Funciones en JavaScript

10 Ejercicios - Parte 1/3

🟢 FUNCIONES BÁSICAS

EJERCICIO

Ejercicio 1.1: Función de bienvenida

Crea una función llamada 'darBienvenida' que reciba un nombre como parámetro y retorne el mensaje: "Bienvenido/a [nombre] al curso de JavaScript"

📝 Instrucciones:

• Usa function declaration
• La función debe recibir un parámetro 'nombre'
• Debe retornar un string con el mensaje de bienvenida

💡 Salida Esperada:

darBienvenida("Ana") → "Bienvenido/a Ana al curso de JavaScript"
// Escribe tu función aquí
function darBienvenida(nombre) {
    // Tu código aquí
}

// Pruebas
console.log(darBienvenida("Ana"));
console.log(darBienvenida("Carlos"));

📝 Solución:

                            
function darBienvenida(nombre) {
    return "Bienvenido/a " + nombre + " al curso de JavaScript";
}

// Pruebas
console.log(darBienvenida("Ana")); // "Bienvenido/a Ana al curso de JavaScript"
console.log(darBienvenida("Carlos")); // "Bienvenido/a Carlos al curso de JavaScript"
                            
                        
EJERCICIO

Ejercicio 1.2: Calculadora de descuentos

Crea una función 'calcularDescuento' que reciba precio y descuento (por defecto 10) y retorne el precio final después del descuento.

📝 Instrucciones:

• Usa parámetros por defecto
• Fórmula: precio - (precio * descuento / 100)
• El descuento por defecto debe ser 10%

💡 Salida Esperada:

calcularDescuento(100) → 90
calcularDescuento(100, 20) → 80
// Escribe tu función aquí
function calcularDescuento(precio, descuento = 10) {
    // Tu código aquí
}

// Pruebas
console.log(calcularDescuento(100));
console.log(calcularDescuento(100, 20));

📝 Solución:

                            
function calcularDescuento(precio, descuento = 10) {
    return precio - (precio * descuento / 100);
}

// Pruebas
console.log(calcularDescuento(100)); // 90
console.log(calcularDescuento(100, 20)); // 80
                            
                        

🟡 EXPRESIONES DE FUNCIÓN

EJERCICIO

Ejercicio 2.1: Validador de edad

Asigna a la variable 'validarEdad' una función expresión que reciba una edad y retorne true si es mayor o igual a 18, false en caso contrario.

📝 Instrucciones:

• Usa function expression (no arrow function)
• Asigna la función a la variable 'validarEdad'
• Retorna boolean

💡 Salida Esperada:

validarEdad(20) → true
validarEdad(15) → false
// Escribe tu función expresión aquí
const validarEdad = function(edad) {
    // Tu código aquí
};

// Pruebas
console.log(validarEdad(20));
console.log(validarEdad(15));

📝 Solución:

                            
const validarEdad = function(edad) {
    return edad >= 18;
};

// Pruebas
console.log(validarEdad(20)); // true
console.log(validarEdad(15)); // false
                            
                        
EJERCICIO

Ejercicio 2.2: Contador regresivo recursivo

Crea una función expresión nombrada 'contarRegresivo' que cuente desde n hasta 1 usando recursión y retorne un array con los números.

📝 Instrucciones:

• Usa función expresión nombrada
• Implementa recursión
• Caso base: n <= 0 retorna array vacío
• Caso recursivo: [n] + resto de números

💡 Salida Esperada:

contarRegresivo(5) → [5, 4, 3, 2, 1]
contarRegresivo(3) → [3, 2, 1]
// Escribe tu función expresión nombrada aquí
const contarRegresivo = function contar(n) {
    // Tu código aquí
};

// Pruebas
console.log(contarRegresivo(5));
console.log(contarRegresivo(3));

📝 Solución:

                            
const contarRegresivo = function contar(n) {
    if (n <= 0) {
        return [];
    }
    return [n].concat(contar(n - 1));
};

// Pruebas
console.log(contarRegresivo(5)); // [5, 4, 3, 2, 1]
console.log(contarRegresivo(3)); // [3, 2, 1]
                            
                        

🔵 FUNCIONES FLECHA

EJERCICIO

Ejercicio 3.1: Arrow function simple

Convierte esta función normal a arrow function de una línea:
function doblar(numero) { return numero * 2; }

📝 Instrucciones:

• Usa sintaxis de arrow function
• Debe ser de una sola línea
• No uses llaves ni return explícito

💡 Salida Esperada:

doblar(5) → 10
doblar(8) → 16
// Convierte a arrow function
const doblar = // Tu código aquí

// Pruebas
console.log(doblar(5));
console.log(doblar(8));

📝 Solución:

                            
const doblar = numero => numero * 2;

// Pruebas
console.log(doblar(5)); // 10
console.log(doblar(8)); // 16
                            
                        
EJERCICIO

Ejercicio 3.2: Arrow function que retorna objeto

Crea una arrow function 'crearEstudiante' que reciba nombre y nota y retorne un objeto con {nombre, nota, aprobado} donde aprobado es true si nota >= 60.

📝 Instrucciones:

• Usa arrow function
• Usa paréntesis para retornar objeto
• aprobado = true si nota >= 60

💡 Salida Esperada:

crearEstudiante("Luis", 75) → {nombre: "Luis", nota: 75, aprobado: true}
crearEstudiante("Ana", 45) → {nombre: "Ana", nota: 45, aprobado: false}
// Escribe tu arrow function aquí
const crearEstudiante = (nombre, nota) => // Tu código aquí

// Pruebas
console.log(crearEstudiante("Luis", 75));
console.log(crearEstudiante("Ana", 45));

📝 Solución:

                            
const crearEstudiante = (nombre, nota) => ({
    nombre: nombre,
    nota: nota,
    aprobado: nota >= 60
});

// Pruebas
console.log(crearEstudiante("Luis", 75)); // {nombre: "Luis", nota: 75, aprobado: true}
console.log(crearEstudiante("Ana", 45)); // {nombre: "Ana", nota: 45, aprobado: false}
                            
                        

🟣 SCOPE Y CLOSURES

EJERCICIO

Ejercicio 4.1: Contador personalizado con closure

Crea una función 'crearContadorPersonalizado' que reciba un valor inicial y retorne una función que incremente desde ese valor.

📝 Instrucciones:

• Usa closure para mantener el estado
• La función interna debe incrementar el contador
• Cada llamada debe retornar el nuevo valor

💡 Salida Esperada:

contador10() → 11
contador10() → 12
contador100() → 101 (independiente)
// Escribe tu función con closure aquí
function crearContadorPersonalizado(inicial) {
    // Tu código aquí
}

// Pruebas
const contador10 = crearContadorPersonalizado(10);
console.log(contador10()); // 11
console.log(contador10()); // 12
const contador100 = crearContadorPersonalizado(100);
console.log(contador100()); // 101

📝 Solución:

                            
function crearContadorPersonalizado(inicial) {
    let contador = inicial;
    
    return function() {
        contador++;
        return contador;
    };
}

// Pruebas
const contador10 = crearContadorPersonalizado(10);
console.log(contador10()); // 11
console.log(contador10()); // 12
const contador100 = crearContadorPersonalizado(100);
console.log(contador100()); // 101
                            
                        
EJERCICIO

Ejercicio 4.2: Cuenta bancaria con closure

Crea una función 'crearCuentaBancaria' que reciba saldo inicial y retorne un objeto con métodos depositar, retirar y consultarSaldo.

📝 Instrucciones:

• Usa closure para mantener saldo privado
• depositar(cantidad): suma al saldo
• retirar(cantidad): resta del saldo
• consultarSaldo(): retorna saldo actual

💡 Salida Esperada:

consultarSaldo() → 1000
depositar(500) → saldo: 1500
retirar(200) → saldo: 1300
// Escribe tu función con closure aquí
function crearCuentaBancaria(saldoInicial) {
    // Tu código aquí
}

// Pruebas
const cuenta = crearCuentaBancaria(1000);
console.log(cuenta.consultarSaldo()); // 1000
cuenta.depositar(500);
console.log(cuenta.consultarSaldo()); // 1500
cuenta.retirar(200);
console.log(cuenta.consultarSaldo()); // 1300

📝 Solución:

                            
function crearCuentaBancaria(saldoInicial) {
    let saldo = saldoInicial;
    
    return {
        depositar: function(cantidad) {
            saldo += cantidad;
        },
        retirar: function(cantidad) {
            saldo -= cantidad;
        },
        consultarSaldo: function() {
            return saldo;
        }
    };
}

// Pruebas
const cuenta = crearCuentaBancaria(1000);
console.log(cuenta.consultarSaldo()); // 1000
cuenta.depositar(500);
console.log(cuenta.consultarSaldo()); // 1500
cuenta.retirar(200);
console.log(cuenta.consultarSaldo()); // 1300
                            
                        

🔶 PARÁMETROS AVANZADOS

EJERCICIO

Ejercicio 5.1: Función con parámetros rest

Crea una función 'calcularPromedio' que use parámetros rest (...numeros) para recibir cualquier cantidad de números y retorne su promedio.

📝 Instrucciones:

• Usa parámetros rest (...numeros)
• Suma todos los números
• Divide entre la cantidad de números
• Retorna el promedio

💡 Salida Esperada:

calcularPromedio(10, 20, 30) → 20
calcularPromedio(5, 15, 25, 35) → 20
// Escribe tu función con parámetros rest aquí
function calcularPromedio(...numeros) {
    // Tu código aquí
}

// Pruebas
console.log(calcularPromedio(10, 20, 30)); // 20
console.log(calcularPromedio(5, 15, 25, 35)); // 20

📝 Solución:

                            
function calcularPromedio(...numeros) {
    let suma = 0;
    for (let numero of numeros) {
        suma += numero;
    }
    return suma / numeros.length;
}

// Pruebas
console.log(calcularPromedio(10, 20, 30)); // 20
console.log(calcularPromedio(5, 15, 25, 35)); // 20
                            
                        
EJERCICIO

Ejercicio 5.2: Función con destructuring

Crea una función 'presentarPersona' que use destructuring para extraer nombre, edad y ciudad (por defecto 'No especificada') de un objeto.

📝 Instrucciones:

• Usa destructuring en los parámetros
• ciudad debe tener valor por defecto
• Muestra la información formateada

💡 Salida Esperada:

"María, 25 años, vive en Madrid"
"Pedro, 30 años, vive en No especificada"
// Escribe tu función con destructuring aquí
function presentarPersona({nombre, edad, ciudad = "No especificada"}) {
    // Tu código aquí
}

// Pruebas
presentarPersona({nombre: "María", edad: 25, ciudad: "Madrid"});
presentarPersona({nombre: "Pedro", edad: 30});

📝 Solución:

                            
function presentarPersona({nombre, edad, ciudad = "No especificada"}) {
    console.log(`${nombre}, ${edad} años, vive en ${ciudad}`);
}

// Pruebas
presentarPersona({nombre: "María", edad: 25, ciudad: "Madrid"});
// "María, 25 años, vive en Madrid"
presentarPersona({nombre: "Pedro", edad: 30});
// "Pedro, 30 años, vive en No especificada"