Una función útil que no hace nada
Este artículo es parte de la serie ReturnTrue. Aquí resolvemos los acertijos de ReturnTrue e intentamos explicar cómo encontramos soluciones y por qué funcionan exactamente.
El objetivo no es mostrar las respuestas, sino profundizar en los elaborados elementos internos de JavaScript y los navegadores. Sin embargo, le recomendamos que intente encontrar soluciones usted mismo. Sería más interesante de esta manera, esté seguro.
Muy bien, el descargo de responsabilidad ha terminado. Continuamos con una introducción explicando qué es ReturnTrue.
Introducción
ReturnTrue es un conjunto de rompecabezas. Cada uno de ellos es una función complicada. Debe pasar argumentos a dicha función, y el resultado de su evaluación debe ser true. No es "valor de verdad", sino exactamente true.
Erling Ellingsen , un programador de Noruega, creó el juego hace más de seis años. ¡Felicitaciones a él y a todos los colaboradores!
Finalmente, comencemos.
IDENTIFICACIÓN
function id(x) {
return x;
}
La solución es obvia:
id(true)
id(!0)
Pero espera, ¿por qué se llama "id"?
¡Me alegra que hayas preguntado!
El título "id" aquí no es por accidente. Hay un término matemático llamado función identidad . Es una función que devuelve su argumento sin cambiarlo.
Para explicar cuándo podemos usarlo, supongamos que queremos pasar por una serie de números y aumentar cada valor impar en 1. Así es como puede verse en JavaScript:
arr.map(x => x % 2 ? x + 1 : x)
Entonces, si nuestro código fuera realmente funcional, se vería así:
map(arr, when(isOdd, inc, id))
Por lo general, un lenguaje de programación funcional tiene las funciones como las que usamos. Por ejemplo, Clojure tiene identidad , F# tiene id , Elixir tiene identidad/1 , etc.
Pero, JavaScript no fue diseñado como un lenguaje funcional puro. Entonces, su implementación puede verse así:
const isOdd = x => x % 2 === 1;
const inc = x => x + 1;
const id = x => x;
const when = (cond, thenFn, elseFn) => x => cond(x) ? thenFn(x) : elseFn(x);
const map = (xs, fn) => xs.map(fn);
¿Necesitamos tal función?
Sí, puede parecer raro en el contexto del desarrollo front-end. Incluso se puede decir que idla función es una chapuza del mundo FP.
Claro, puede sonar como una broma o un "error" del diseño del lenguaje de programación. Primero, define funciones que no se pueden evaluar sin pasar argumentos (por ejemplo, whenla función que definimos anteriormente). Luego, define más funciones para usarlas como un parche adhesivo para lo definido anteriormente.
Sin embargo, el paradigma de la programación funcional intenta estar lo más cerca posible de las matemáticas. idLa función es algo normal para este campo de la ciencia.
Puede que no sea obvio por qué exactamente necesitamos tal función. Pero, cuando trabajamos con números, usamos algunos especiales como 0 o 1. Cuando trabajamos con arreglos, el especial es un arreglo vacío. Cuando trabajamos con funciones, también necesitamos una “especial”. es id_
A veces puede parecer una sobrecarga y puede pensar: "¿Por qué no definir whenla función de otra manera, donde elseFnno será necesaria?" . Claro, es posible. Pero lo explícito es mejor que lo implícito.
Escrito originalmente por Igor Adamenko en el blog de Uploadcare

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































