Funciones de alto orden

July 25, 2019

...

Las funciones en javascript son de alto orden o de primera clase (first class), esto quiere decir que una función puede ser asignada a una constante esta ser utilizada más adelante. Tomemos el siguiente ejemplo:

function f(x) {
  return x + 1
}
f(1) // 2

En el ejemplo anterior estamos definiendo una función en javascript. Además de poder crearla de esta manera podemos asignarla a una constante:

const g = function f(x) {
 return x + 1
}

g(1) // 2

Lo que significa que podemos pasar una referencia de una función y asignar esta a una variable o constante en javascript.

Además de eso podemos tomar esta constante función y pasarla como argumento a otra función, y aquí en donde empieza la maravilla:

// crearemos la funciones de ahora en adelante anónimas
// para simplificar los ejemplos
const f = function (x) {
 return x + 1
}

const g = function (fn) {
  return fn(1)
}

g(f) // 2

Lo que hicimos acá fue declarar dos funciones, la primera le suma 1 a cualquier valor que se le pase como argumento, esta es sencilla de entender. La segunda puede ser más confusa si es primera vez esta notación, también si conoces los callback entonces todo tendrá mucho más sentido. Pero cuento corto:

La función g recibe otra función como argumento y la ejecuta pasando en el primer argumento el valor de 1. Otra notación que nosotros podríamos haber visto que hará también este ejemplo más fácil de leer es el siguiente:

const g = function (fn) {
  return fn(1)
}

// este es una sintaxis más común de callback
g(function (x) {
 return x + 1
}) // 2

Acá como pueden ver simplificamos aun más el ejemplo y ya no existe la función f, solo existe g, sin embargo su funcionalidad (de sumar 1) sigue existiendo en forma de función anónima. La única gran diferencia es que en lugar de definir la función afuera y asignarla a la constante f, la estamos declarando inmediatamente dentro de la misma función.

Esto libera un montón de posibilidades al momento de escribir código ya que libera aún más la composición de software, donde en base a pequeñas funciones podremos escribir una función más grande. Esto permite que nuestro código sea más declarativo y fácil de leer. Veremos que en nuestro código vamos a empezar a declarar que es lo que queremos que haga y no como queremos que lo haga. Esto tiene también un montón de beneficios al momento de redactar pruebas. Utilizando funciones de alto orden podemos desbloquar la composición de software en javascript, lo que hace que podamos encadenar pequeñas instrucciones de una manera bastante legible, pero ya veremos composición y funciones puras en un post del futuro.


Suscríbete

Suscríbete a la lista para más cursos, posts y videos tutoriales. Prometo no enviarte más de un correo semanal 🙏

Creado por Nicolás Schürmann ingeniero e instructor de software. Cuando no está programando, esta frente a una cámara dictando cursos, creyéndose youtuber o apoyando a sus alumnos. Puedes seguirlo en twitter o también suscribirte a su canal de youtube. Considera comprar sus cursos por este medio y así apoyas al instructor.