JavaScript de Cero a Experto / Funciones
Rest parameters: argumentos flexibles
¿Y si no sabes cuántos argumentos recibirá tu función? Sumar 3 números, o
10, o los que sean. Los REST PARAMETERS (...) resuelven esto: recogen
todos los argumentos que sobren en una sola lista, para que tu función se
adapte a cualquier cantidad de datos. Es la pieza que faltaba para funciones
verdaderamente flexibles.
La bolsa que recoge todo lo demás
...numeros recoge cualquier cantidad de argumentos en una LISTA (un array,
el tema del próximo módulo). Ya puedes preguntarle cuántos hay
(.length) y recorrerla con for...of (for (const n of lista) visita
cada elemento). La misma función suma 3 valores, 2, o ninguno — se adapta.
Combinar fijos + rest
Puedes tener parámetros normales Y un rest, pero el rest va SIEMPRE al final (es "lo que sobre"):
El primer argumento va al parámetro fijo (etiqueta), y TODO lo demás cae en
el rest (gastos). Por eso el rest debe ser el último parámetro: representa
"todo lo que quede después de los fijos". (En código viejo verás un objeto
arguments que hacía algo parecido; el rest es su reemplazo moderno y más
claro.)
Escribes function juntar(separador, ...palabras). Llamas juntar('-', 'a', 'b', 'c'). ¿Qué recibe cada parámetro?
Mini-reto
En "Mi Bolsillo": escribe function promedioGastos(...gastos) que devuelva
el promedio (suma dividida entre la cantidad). Cuida el caso de CERO gastos
(dividir entre 0 da problemas: si gastos.length === 0, devuelve 0). Pruébala
con varios gastos y con ninguno. Una función que se adapta a cualquier
cantidad de datos es una herramienta de verdad.
Qué sigue
Ya haces funciones flexibles. Pero, ¿dónde "viven" las variables que creas dentro de una función? ¿Puede el resto del programa verlas? La próxima lección abre el SCOPE (alcance): las reglas de qué código puede ver qué variables. Entenderlo evita una familia entera de bugs confusos.