¿Qué son las funciones variádicas?

Funciones variádicas en JavaScript

Esta es otra de las características que hacen flexible a este lenguaje de scripting.
En JavaScript no se necesita ningún truco especial como la sobrecarga de métodos (overload) para hacer que la misma función reciba un número diferente de argumentos, ya que disponemos de la variable local arguments, la cual está disponible dentro del body de las funciones (excepto Arrow functions) y contiene la referencia a cada uno de los argumentos enviados a la función.

Una función variádica es una función de aridad indefinida, es decir, que acepta una cantidad de argumentos variable.

    function write() {
        console.log(arguments);
    }

    write("JavaScript"); // ["JavaScript"]
    write(5, 6, "Awesome"); // [5, 6, "Awesome"]

😮 El objeto arguments es similar a un Array, pero NO es un Array, ya que no tiene ninguna de las propiedades de un Array, excepto length.

Los elementos del objeto arguments pueden ser modificados, pero NO es una buena práctica hacer esto.

    function write() {
        arguments[1] = null;
        console.log(arguments);
    }

    write("JavaScript");  // ["JavaScript", null]
    write("ES5", "ES6");  // ["ES5", null]
    write(1, 2, 3, 4, 5); // [1, null, 3, 4, 5]

💡 Si queremos hacer operaciones de un Array, como join, concat, find, flat, slice, etc, entonces podemos convertir el objeto arguments a un verdadero Array:

    function write() {
        var args = Array.apply(null, arguments);
        console.log(args); // real Array
    }

    write("ES5", "ES6", "Rules!"); // ["ES5", "ES6", "Rules!"]
    write("JavaScript", "rocks!"); // ["JavaScript", "rocks!"]

⭐ El objeto arguments posee las siguientes propiedades:

  • arguments.callee: referencia a la función que se está ejecutando.
  • arguments.caller: referencia a la función que invocó a la función en ejecución.
  • arguments.length: referencia al número de argumentos pasados a la función.

➡ ❗ No se recomienda usar las propiedades arguments.callee ni arguments.caller ya que son APIs obsoletas, y no son soportadas a partir de ECMAScript 5 en strict mode.

Las funciones variádicas nos dan la posibilidad de crear funciones tan complejas como necesitemos, por ejemplo en casos en donde el resultado de una operación dependa de la cantidad de parámetros pasados a la función. 💡 Tengamos en cuenta que las Arrow functions no tienen acceso al objeto arguments y el contexto this se comporta diferente a las funciones normales.

😎 Happy coding!

Advertisements

One thought on “¿Qué son las funciones variádicas?

Comentarios

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s