Lección 12 · 12 de 20
Parámetros, valores por defecto y return · JavaScript
Más sobre funciones en JavaScript: parámetros con valor por defecto, return para salir antes, undefined, parámetros rest y devolver un objeto.

Un parámetro puede llevar un valor por defecto con =: orderCoffee(size = "medium", sugar = 1) usa esos valores cuando falta el argumento. Por eso orderCoffee("small") sale con un azúcar y orderCoffee() es un café mediano.
`return` termina la función en ese mismo momento. finalPrice comprueba primero si el precio es negativo y, si lo es, devuelve el aviso sin llegar a calcular el descuento. Salir pronto así evita anidar muchos if.
Una función sin return devuelve `undefined`: showScore escribe la puntuación, pero lo que devuelve no sirve para nada. Distinga entre escribir un valor en la consola y devolverlo.
Los parámetros rest, con tres puntos (...grades), recogen todos los argumentos que lleguen en un array, sean tres o ninguno. average los suma con for...of y, si no hay ninguno, devuelve 0 en lugar de dividir entre cero.
Una función devuelve un solo valor, pero ese valor puede ser un objeto con varios datos, como hace stats. En una flecha, el objeto va entre paréntesis, ({ ... }), para que las llaves no se confundan con el cuerpo.
Código · main.js
// Default values are used when an argument is missing.function orderCoffee(size = "medium", sugar = 1) { return `${size} coffee with ${sugar} sugar`;}console.log(orderCoffee("large", 2));console.log(orderCoffee("small"));console.log(orderCoffee());// return ends the function at once: useful to stop early.function finalPrice(price, discountPercent = 0) { if (price < 0) return "invalid price"; const discount = price * discountPercent / 100; return price - discount;}console.log(finalPrice(80, 25), "|", finalPrice(80), "|", finalPrice(-5, 10));// Without return, a function gives back undefined.function showScore(points) { console.log("Score:", points);}console.log("showScore returned:", showScore(120));// Rest parameters (...) collect any number of arguments in an array.function average(...grades) { let sum = 0; for (const g of grades) sum += g; return grades.length > 0 ? sum / grades.length : 0;}console.log("Average:", average(6, 7.5, 9), "| Of nothing:", average());// To give back several values, return an object.const stats = (a, b) => ({ total: a + b, difference: a - b });console.log(stats(30, 12));Salida · node main.js
large coffee with 2 sugar
small coffee with 1 sugar
medium coffee with 1 sugar
60 | 80 | invalid price
Score: 120
showScore returned: undefined
Average: 7.5 | Of nothing: 0
{ total: 42, difference: 18 }Para recordar
param = valorda un valor por defecto.returnsale de la función en el acto.- Sin
return, la función devuelveundefined. ...argsrecoge cualquier número de argumentos en un array.- Para devolver varios datos, devuelva un objeto.
Ejercicio
Escriba ticketPrice(age, isStudent = false) que devuelva 0 para menores de 4 años, 6 euros para estudiantes y 9 para el resto, y total(...prices) que sume todos los precios que reciba.