JavaScript 2015 (VII). Funciones de usuario.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Las funciones de usuario son imprescindibles en casi cualquier código javaScript y, hasta ahora, en nuestros desarrollos, han sido una inestimable aportación.

JS6 añade nuevas funcionalidades, que otros lenguajes de alto nivel ya implementan desde hace años, permitiéndonos muchas más posibilidades. En este artículo vamos a conocer las características que el nuevo estándar nos ofrece, para que podamos incluirlas en nuestros códigos.

PARÁMETROS POR DEFECTO

Al contrario de lo que ocurría hasta ahora, cuando defnimos una función podemos darle un valor por defecto a los parámetros. Esto no es nuevo para los desarrolladores avezados, por ejemplo, en PHP pero, hasta la llejada de JS6, era impensable en JavaScript. Supongamos el siguiente código:

En la página del navegador vemos lo siguiente:

El nombre de la persona es: Luis
El apellido de la persona es: Pérez
El nombre de la persona es: undefined
El apellido de la persona es: undefined

La primera vez que se invoca a la función mostrarPersona() (línea 15) se le pasan dos argumentos, y estos son procesados y mostrados. Sin embargo, la segunda vez, (en la línea 16) al no pasar los argumentos, la función les asigna, automáticamente, el valor undefined. Esto era lo único que podíamos hacer antes. Ahora, sin embargo, podemos sustituir la línea que declara la función por una como la siguiente:

function mostrarPersona(nombre = "Nombre no especificado", apellido = "Apellido no especificado"){

Esto hace que los dos parámetros (nombre y apellido) tengan ya un valor por defecto, que se mostrará si en la llamada a la función no se pasa un valor diferente. No todos los parámetros tienen que tener un valor por defecto. Sólo aquellos que consideremos en el desarrollo que pueden no llegar. Observa el siguiente código:

Observa las tres invocaciones que hemos hecho en las líneas 15, 16 y 17. El resultado en la página es el siguiente:

El nombre de la persona es: Luis
El apellido de la persona es: Pérez
El nombre de la persona es: Nombre no especificado
El apellido de la persona es: García
El nombre de la persona es: Paco
El apellido de la persona es: Apellido no especificado

PARÁMETROS AGRUPADOS

La técnica de parámetros agrupados se emplea cuando una función puede recibir un número de parámetros que, a priori, no sabemos cuantos serán. La función debe ser capaz de operar en cada ejecución del script, tanto si no recibe parámetros, como si recibe cualquier número de estos. Para ello definimos la función con un solo parámetro, precedido por un operador nuevo formado por tres puntos consecutivos (...). El parámetro será tratado, internamente, como una matriz. Observa el siguiente listado:

El resultado en la página es el siguiente:

No se ha incluido ninguna persona.
Paco García
Pedro Fuentes
Carmen Gómez
Sonia Gil

Aunque me imagino que ya has entendido lo que ha ocurrido, comentemos algunos detalles. En primer lugar, fíjate en la forma en que hemos declarado la función mostrarPersonas() en la línea 10 del listado. Como hemos dicho, el nombre del argumento se precede de ....

En la primera invocación (línea 19 del listado) no pasamos ningún argumento, por lo que, dentro de la función, personas es una matriz vacía. En la línea 20 pasamos cuatro argumentos, que son los elementos que la matriz personas tiene dentro de la función. Como ves, recorremos la matriz con un bucle, para mostrar estos nombres.

Esta técnica para pasar un número indeterminado de parámetros a una función se conoce como parámetros agrupados o en rest.

PARÁMETROS SPREAD

Esta técnica es, de algún modo, la inversa de la anterior. Consiste en definir una función en la que sí sabemos el número de parámetros que va a recibir, y los enviamos como una matriz. También recurrimos al operador de tres puntos consecutivos pero, en lugar de usarlo en la declaración, lo empleamos en la invocación. Esto nos permite tener los argumentos almacenados en una matriz. Le pasamos la matriz a la función como un único argumento y cada elemento de la matriz se asigna a un parámetro de la función. Obviamente, lo suyo es que la matriz tenga tantos elementos como parámetros se definen en la función. Observa el siguiente listado:

Como ves, la forma de declarar y definir la función mostrarDatos() no presenta, esta vez, ninguna novedad. Es la forma tradicional empleada desde siempre en JavaScript. Lo interesante es cómo hacemos las invocaciones en las líneas de la 17 a la 20. Lo que vemos en la página responde a lo siguiente:

El nombre es: Paco.
El apellido es: García.
La edad es: 34.
======================================================
El nombre es: undefined.
El apellido es: undefined.
La edad es: undefined.
======================================================

Como puedes ver en la segunda invocación, al faltar argumentos en la matriz, estos se muestran coo udefined en la función. Aunque podríamos haber hecho uso de los parámetros por defecto que hemos visto en este mismo artículo, he preferido dejarlo así para facilitar la comprensión de la operativa.

OPERADOR FLECHA (=>)

Cuando una función es muy simple, con poco código, se puede representar en una notación más abreviada mediante el uso de este operador. Observa el siguiente listado:

Como ves, no tiene nada nuevo ni de particular. El resultado, en la página de tu navegador, es el siguiente:

El nombre es: Laura.
El apellido es: Martín.
La edad es: 25.

La forma de crear una alternativa mediante el operador => es la que ves a continuación:

El resultado es el mismo que en el ejemplo anterior. Observa la forma en que se declara la función (en la línea 10) y cómo se invoca (en la línea 11). Parece una forma simplificada para optimizar funciones. El problema es que sólo es válido para funciones en las que se haga una elaboración muy simple de los datos recibidos como argumentos, como en este ejemplo, y dicha mini elaboración se devuelva directamente. No admite múltiples sentencias, ni tampoco ninguno de los recursos que hemos visto en este artículo, por lo que, en la práctica, este sistema es meramente anecdótico, sin uso real.

     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *