Programación funcional: ¿Qué es el concepto de Cierre? (JavaScript/Mecanografiado)

Apr 01 2023
Cada vez que escribimos código, escribimos funciones. Una función es un bloque de código reutilizable que se puede llamar en cualquier lugar.
Foto de Cristina Gottardi en Unsplash

Cada vez que escribimos código, escribimos funciones. Una función es un bloque de código reutilizable que se puede llamar en cualquier lugar.

Cuando llamamos a una función, podemos proporcionarle entradas como argumentos, ejecuta el código y devuelve la salida.

¿Qué es el concepto de Cierre?

El concepto de cierre es la declaración de una función dentro de otra función. Este concepto le da a la función interna la capacidad de acceder a los estados de la función externa (le gustan las variables y los argumentos).

Veamos un ejemplo de código

const outerFunction = () => {
  const state = 10;

  const printState = () => {
    console.log(state);
  };

  printState();
};

outerFunction(); // print : 10

Declarar una función dentro de otra nos permite escribir código y declarar lo que hace este código nombrando la función. La ventaja es que nuestro código se vuelve más declarativo. Ahora sabemos lo que hace nuestro código leyendo el nombre de la función en lugar de leer el código en sí.

Código sin cierre

deja ver un codigo sin cierre

const getFileSeparatorByOs = (os: 'linux' | 'windows', enableOsCheking = true) => {
  if (enableOsCheking) {
    if (os === 'linux') {
      return '/';
    }
    if (os === 'windows') {
      return '\\'
    }
  } else {
    return '/'
  }
};

const linuxSeparator = getFileSeparatorByOs('linux');
console.log(linuxSeparator);

const windowsSeparator = getFileSeparatorByOs('windows');
console.log(windowsSeparator);

const defaultSeparator = getFileSeparatorByOs('windows', false);
console.log(defaultSeparator);

Este código no es realmente complicado de entender, pero podemos hacerlo más declarativo (fácil de leer).

Código con cierre

deja ver un codigo sin cierre

const getFileSeparatorByOs = (os: 'linux' | 'windows', enableOsCheking = true) => {
  const getLinuxSeparator = () => '/';
  const getWindowsSeparator = () => '\\';
  const getDefaultSeparator = () => '/';
  
  if (enableOsCheking) {
    if (os === 'linux') {
      return getLinuxSeparator();
    }
    if (os === 'windows') {
      return getWindowsSeparator();
    }
  } else {
    return getDefaultSeparator();
  }
};

const linuxSeparator = getFileSeparatorByOs('linux');
console.log(linuxSeparator);

const windowsSeparator = getFileSeparatorByOs('windows');
console.log(windowsSeparator);

const defaultSeparator = getFileSeparatorByOs('windows', false);
console.log(defaultSeparator);

Conclusión

El concepto de clausura es declarar una función dentro de otra para darle acceso a los estados de función externos.

Si te fascina la programación funcional, aquí tienes mi artículo sobre la función de curryficación https://link.medium.com/JAoSkvB3Byb

Si este artículo te fue útil, por favor dale me gusta. Y, si te gustan los conceptos de programación que te permiten codificar de forma limpia, suscríbete ahora, para no perderte nada.