¿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)