Novedades ES6

Novedades ES6 - Funciones con parámetros Rest

La sintaxis de los parámetros rest nos permiten representar un número indefinido de argumentos como un array. El último parámetro de una función se puede prefijar con ..., lo que hará que todos los argumentos restantes (suministrados por el usuario) se coloquen dentro de un array de javascript  "estándar".

Diferencia entre los parámetros rest y el objeto arguments

Hay tres principales diferencias entre los parámetros rest y el objeto arguments:

  • los parámetros rest son sólo aquellos a los que no se les ha asignado un nombre, mientras que el objeto arguments contiene todos los argumentos que se le han pasado a la función;
  • el objeto arguments no es un array real, mientras que los parámetros rest son instancias de  Array , lo que significa que lo los métodos como sort, map, forEach o pop pueden aplicarse directamente;
  • el objeto arguments tiene una funcionalidad adicional específica para sí mismo (como la propiedad callee).

Otra funcionalidad en JavaScript con la actualización ECMAScript 2015 (también llamada ES6) es la posibilidad de pasar una lista indefinida de valores y que los reciba un vector.

El concepto de parámetros Rest se logra antecediendo tres puntos al nombre del parámetro (el parámetro es un objeto de la clase Array con todas sus funcionalidades):

function sumar(...parametro)

Luego en la llamada podemos pasar una lista indeterminada de datos:

sumar(4, 55, 33);
<!DOCTYPE html>
<html>
<head>
  <title>Ejemplo de JavaScript</title>
  <meta charset="UTF-8">
</head>
<body>

<script>

  function sumar(...valores) {
    let suma=0;
    for(let x=0;x<valores.length;x++)
      suma+=valores[x];
    return suma;
  }

  document.write(sumar(10, 2, 44, 3));
  document.write('<br>');
  document.write(sumar(1, 2));
  document.write('<br>');
  document.write(sumar());
  document.write('<br>');

</script>

</body>
</html>

El parámetro valores es en realidad un vector y como tal podemos disponer un for para recorrerlo y acceder a sus elementos mediante un subíndice:

 function sumar(...valores) {
    let suma=0;
    for(let x=0;x<valores.length;x++)
      suma+=valores[x];
    return suma;
  }

Cuando llamamos a la función podemos pasar una cantidad variable de enteros para que sean sumados:

  document.write(sumar(10, 2, 44, 3));
  document.write(sumar(1, 2));
  document.write(sumar());

La función con un parámetro Rest puede tener otros parámetros pero se deben declarar antes:

function operar(tipo, ...valores)

Los parámetros Rest no pueden tener un valor por defecto.