En este artículo quiero compartir dos métodos de arrays que van a ayudarte a tener un código más ordenado y predecible.
Me refiero a los métodos: some y every. Estos métodos fueron introducidos en
ES5 junto con los más populares map, filter y reduce.
Some
¿Cuántas veces has visto o hecho algo así?
const apiResponses = [
{
data: {
name: 'foo',
},
},
{
data: {
error: {
message: 'ups',
},
},
statusCode: 500,
},
{
data: {
name: 'foo',
},
},
];
let error = false;
for (let i; i <= apiResponses.length; i++) {
if (response.statusCode === 500) {
error = true;
}
}
console.log(error); // trueLo cierto es que esto es un problema, por que no nos interesa para nada qué es
i. Además, estamos usando un enfoque imperativo, en vez de uno declarativo. Si
quieres saber más de esto te dejo un artículo:
Imperativo vs declarativo
Some al rescate
Ahora veamos el otro enfoque:
const error = apiResponses.some(response => response.statusCode === 500);
console.log(error); // trueMuchos más corto, y con menor probabilidad a errores de humano!
Esto se puede mejorar aún más pasando el callback a la función some como una
referencia a otra función:
const hasServerError = response => response.statusCode === 500;
const error = apiResponses.some(hasServerError);
console.log(error); // trueEsto es mucho más legible aún, porque se lee como inglés común y corriente: ‘error será true si alguna (some) apiResponse tiene server error’. Bueno, en inglés suena mejor.
Dato freak: este estilo de pasar los callbacks sin explicitar los argumentos se conoce como point-free style
Every
Pasemos a ver la contraparte de some: every
const hasGoodStatus = response => response.statusCode === 200;
const areAllResponsesGood = apiResponses.every(hasGoodStatus);
console.log(areAllResponsesGood); // falsePodemos ver que every retorna true solo si todos los elementos del array
retornan true al ser llamados con el callback, que en este caso es
hasGoodStatus
Action Points
Para poner en práctica lo aprendido te sugiero:
- Intentar usar uno de estos métodos en tu día a día, quizás refactorizando un código antiguo o al crear uno nuevo.
- Intentar aplicar el estilo point-free para abstraer aún más las
implementaciones que reciban las funciones
everyysome.