Currying

Pues no, no se trata de un deporte de disco sobre hielo usando escobas, y tampoco es una práctica consistente en sazonar todas las comidas con la misma especia. En el cálculo lambda se usan funciones con un único parámetro. En posts venideros sobre conexión de funciones conoceremos el motivo, pero ahora centrémonos en aprender como superar esta limitación gracias al currying.

El amigo Haskell Curry, además del lenguaje Haskell desarrolló este concepto. ¿Cómo podríamos emular una función que suma tres número recibidos como parámetros, igual a la del ejemplo que sigue, usándo exclusivamente funciones con un único parámetro?

Función lambda

Buscando un poco en la red, seguro que encuentras algún lugar donde se otorge al cálculo lambda el título de lenguaje de programación mas pequeño que existe. Básicamente se trata de un esquema para definir funciones y una regla de transformación simple mediante la sustitución de variables.

Una función tiene un aspecto tal que así en cálculo lambda: λx.1+x. La variable entre el carácter λ y el punto es el parámetro de la función, y la expresión de esta es lo que sigue a dicho punto. Para aplicar esta función le facilitamos un argumento, por ejemplo 14, y lo podemos representar con el uso de paréntesis: (λx.1+x)(14). El resultado en este caso sería 15.

Polyfills

Un polyfill es un script de código que sirve para emular una característica que un desarrollador necesita en un navegador cuando este no dispone de ella de forma nativa. En su mayoría, los polyfills están escritos en javascript, y nos permiten desarrollar apliaciones web centrados en nuevos estándares, pues suplen la carencia de los navegadores más antiguos en el momento de implementarlos.

El uso de polyfills invita a usar una detección de características del navegador, en lugar de comprobar su versión,  puesto que con su uso únicamente habría que comprobar si el navegador, sea cual sea, y sea cual sea su versión, dispone de la cualidad que necesitamos en nuestro desarrollo, y de no ser así, usaríamos un polyfill que la emulara.

Hoisting de Javascript

Explicado de un modo muy breve, consiste en que javascript, en el momento de compilar el código, prioriza las declaraciones de variables, siendo lo primero a tratar dentro de cada contexto. Es importante tener en cuenta que esto no aplica para las asignaciones, únicamente para la declaración. Estudia el siguiente script:

/*
 * Logamos 'undefined' por que la declaración de x ha sido alzada
 * por encima de esta función, pero no su asignación. Observa,
 * no obstante, que no recibimos un error de referencia a x a pesar
 * de que la línea dónde se declara y asigna está justo debajo.
 */
console.log("x:", x)
var x = "Primera asignación";

//Ahora sí logamos 'Primera asignación'
console.log("x:", x)

(function () {
 /* No logamos 'Primera asignación' sino 'undefined', porque la
  * segunda declaración ha sido elevada al inicio de su contexto,
  * sobrescribiendo a la primera declaración y asignación.
  */
  console.log("x:", x);
  var x = "Segunda asignación";

  // Ahora sí, logamos 'Segunda asignación'
  console.log("x:", x);
}());