Out of the loop

El de las first-class functions o funciones de primera clase

20 abril, 2020

O mas bien, el de cuando decidí contribuir en MDN y empecé por las first-class functions. Esta idea de contribuir en un proyecto open source ya la tenía hace tiempo y MDN me venía como anillo al dedo, ya que en ese momento no quería contribuir escribiendo código sino que quería colaborar de alguna otra manera. De hecho, opté por añadir traducciones o pequeñas modificaciones a contenido ya existente. Mis contribuciones, al menos de momento, son sin lugar a dudas escasas, pero estamos en ello.

¿Qué son las first-class functions?

Siempre y cuando una función se trate como cualquier otra variable, se dice que ese lenguaje tiene first-class functions y JS (a.k.a. JavaScript) no iba a ser menos. En el caso de JavaScript las funciones son first-class objects ya que pueden ser almacenadas en una variable, un array y un objeto, pueden ser pasadas como argumentos a una función y pueden ser devueltas desde una función.

Almacenadas en una variable

// Variable
const diHola = function () {  console.log('¡Hola!');};
diHola();
// → ¡Hola!

// Array
const saludos = [];saludos.push(diHola);
console.log(saludos);
// → [f]
saludos[0]();
// → ¡Hola!
// Object
const saludo = { diHola };
console.log(saludo);
// → {diHola: f}
saludo.diHola();
// → ¡Hola!

Pasadas como argumentos en una función

function diHola() {
  return 'Hola ';
}

function saludar(saludo, nombre) {
  console.log(saludo(), nombre);
  // → Hola JavaScript
}

// Pasamos `diHola` como argumento de la función saludarsaludar(diHola, 'JavaScript');

Devueltas desde una función

function diHola() {
  return function () {    console.log('¡Hola!');  };}

Para invocar a la función podemos hacerlo de dos maneras. Usando una variable o con doble paréntesis.

const saludar = diHola();
saludar();
// → ¡Hola!
diHola()();
// → ¡Hola!

A una función que devuelve una función se le llama habitualmente higher-order function. Pero eso ya lo veremos en el siguiente episodio: El de las higher-order functions o funciones de orden superior. Por cierto, este es la entrada en MDN de las funciones de primera de clase.