domingo, 4 de octubre de 2020

Javascript: Ejemplo de función usada como parámetro (callback).

Las funciones son ciudadanos de primera clase en Javascript. Cuando se dice primera clase, es porque las funciones se tratan como cualquier otro tipo, ya sea primitivo o resultado de instanciar una clase creada por el desarrollador. Es decir, una función se puede utilizar igual que los otros tipos,  almacenándola en una array, utilizándola como parámetro de otra función, almacenándola  en una variable, etc.

Se muestra a continuación un ejemplo que hace uso de una función como parámetro de otra. Este ejemplo se muestra la misma funcionalidad codificada con 3 sintaxis distintas:
  •     funciones clásicas
  •     funciones anónimas
  •     funciones arrow
El objetivo es hacer los ejemplos comprensibles para el mayor número de programadores posible, independientemente del tipo de funciones que estén acostumbrados a manejar.

Funciones clásicas

Funciones anónimas

Funciones arrow

Estos tres códigos son equivalentes, es decir si los ejecutamos obtenemos el mismo resultado:

    Hi pepe suarez
    Bye pepe suarez

Las funciones conocidas como callback, son funciones que se pasan como parámetros a otras funciones y que se ejecutan dentro de éstas. Es decir el ejemplo tiene  dos funciones hi y bye que son llamadas como callbacks desde la función greeting.

Esta posibilidad de llamar a funciones desde otras funciones que las han recibido como parámetros, acerca a javascript hacia la programación funcional. La programación funcional permite desarrollar código más estable, porque está menos acoplado y es más legible frente a la programación imperativa.
 
Si se supone que no se puede utilizar funciones como parámetros. Una posible codificación para conseguir una funcionalidad igual a la mostrada podría ser:
 
Este código tiene estructura de programación imperativa. 
 
Supongamos que es necesario incluir un nuevo tipo de saludo por ejemplo “Buenas tardes”. ¿Qué cambios hay que realizar en cada caso serían:
  • En el primer caso “tipo funcional” tendríamos que añadir la función goodEvening(name, lastName) y llamarla desde greetings(goodEvening). Ningún cambio más es necesrio.
  • En el segundo caso “tipo imperativo” tendríamos que añadir la función goodEvening(name, lastName), un  nuevo tipo de saludo greeting(“goodEveningType”) y modificar la función greeting para que el if considerase que pueden existir un nuevo tipo de saludo.

Conclusión.

La posibilidad de utilizar funciones como parámetros, en este caso, permite generar un código más orientado a la extensión que a la modificación. Esto es debido a que en el caso “tipo funcional” extendemos el comportamiento del sistema sin la necesidad de cambiar nada en la función greeting. La modificación es más costosa en el caso “tipo imperativo” incluye tener que modificar la propia función greeting.
 

No hay comentarios:

Publicar un comentario