¿Qué es un parámetro de tipo REST?
Los parámetros de tipo REST son una nueva funcionalidad añadida al lenguaje en la especificación ES6. Se aplican en funciones (tradicionales o anónimas) y permite recibir n número de parámetros.
Sintaxis
function test(a,b, ...c){ //cuerpo de la función } // ...c es un parámetro de tipo REST
Los 3 puntos suspensivos dentro de la zona de parámetros de una función indican un parámetro de tipo REST
c
es un arreglo, por ende podemos usar cualquier método útil para arreglos:map()
,filter()
,reduce()
, etc.
Como siempre todo esto se comprende mejor con ejemplos prácticos:
Imaginemos que queremos hacer una función que nos sume 2 números, se vería más o menos así:
let sumar = (a,b) => a+b; console.log(sumar(5,6)) //salida: 11
Ahora como podríamos modificar nuestra función sumar()
para que podamos sumar cualquier cantidad de números y no solo limitarnos a 2, para ello, podemos usar un parámetro de tipo REST de la siguiente manera:
let sumar = (...numeros) => numeros.reduce((a,b) => a+b); console.log(sumar(5,6,9)) //20 console.log(sumar(5,6,9,12)) //32 console.log(sumar(5,6)) //11
numeros
es un arreglo.
Usando un parámetro de tipo REST y el método reduce()
podemos llegar a sumar n numeros usando nuestra función.
Ahora imaginemos que necesitamos crear una función que determine cuál es el mínimo numero de una lista
function max(...numeros){ let max = numeros[0]; for(let i=1; i<= numeros.length; i++){ if(numeros[i]>max){ max = numeros[i]; } } return max; } console.log(max(5,9,3));// 9 console.log(max(10,20,30));// 30 console.log(max(5,8,10,100,-1,8,70,50,1598,-9,50,71)); //1598 console.log(max(5));// 5 console.log(max());// undefined
Como pueden ver funciona muy bien, pero tenemos un pequeño problema cuando llamamos a la función sin parámetros, para solucionar esto podemos hacer una pequeña validación:
function max(...numeros){ if(!numeros.length){ return("Necesita poner parametros") } let max = numeros[0]; for(let i=1; i<= numeros.length; i++){ if(numeros[i]>max){ max = numeros[i]; } } return max; } console.log(max());// "Necesita poner parametros"
Teniendo en cuenta que javascript soporta parámetros por defecto podríamos mejorar nuestro ejemplo:
function max(max = 0 ,...numeros){ for(let i=0; i<= numeros.length; i++){ if(numeros[i]>max){ max = numeros[i]; } } return max; } console.log(max(5,9,3));// 9 console.log(max(10,20,30));// 30 console.log(max(5,8,10,100,-1,8,70,50,1598,-9,50,71)); //1598 console.log(max(5));// 5 console.log(max());// 0
Un detalle a tomar en cuenta es que los parámetros REST deben incluirse al final, por ejemplo, si hiciera lo siguiente, tendría un error:
//incorrecto function max(...numeros, max = 0 ){ //cuerpo de la función } //correcto function max(max = 0 , ...numeros){ //cuerpo de la función }
Referencias 👌
- https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Funciones/parametros_rest
- https://desarrolloweb.com/articulos/operador-rest-javascript-es6.html
Conclusiones ✅
- Los parámetros REST permiten incorporar n parámetros a nuestras funciones.
- Los parámetros REST son arreglos, por ende, podemos usar varios métodos disponibles para su manipulación.
- El orden de los parámetros importa.
Top comments (0)