Siempre me han enseñado que tener efectos secundarios en una if
afección es malo. Lo que quiero decir es;
if (conditionThenHandle()) {
// do effectively nothing
}
... Opuesto a;
if (condition()) {
handle();
}
... y entiendo eso, y mis colegas están contentos porque no lo hago, y todos nos vamos a casa a las 17:00 un viernes y todos tienen un feliz fin de semana.
Ahora, ECMAScript5 introdujo métodos como every()
y some()
to Array
, y los encuentro muy útiles. Son más limpios que for (;;;)
los demás, le dan otro alcance y hacen que el elemento sea accesible mediante una variable.
Sin embargo, al validar la entrada, casi siempre me encuentro usando every
/ some
en la condición para validar la entrada, luego uso every
/ some
nuevamente en el cuerpo para convertir la entrada en un modelo utilizable;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... cuando lo que quiero hacer es;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... lo que me da efectos secundarios en una if
condición que es mala.
En comparación, este es el código con un viejo for (;;;)
;
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Mis preguntas son:
- ¿Es definitivamente una mala práctica?
- ¿Estoy (mis | ab) usando
some
yevery
(¿ debería estar usando afor(;;;)
para esto?) - ¿Hay un mejor enfoque?
some
, quiero hacer algo con el elemento, si lo uso every
, quiero hacer algo a todos esos elementos ... some
y every
no me dejen acceder a esa información, así que tampoco puedo los uso, o tengo que agregar efectos secundarios.
some
en mi if
condición para determinar si un determinado elemento de la matriz exhibe una cierta propiedad, 9/10 necesito para operar en ese elemento en mi if
cuerpo; ahora, como some
no me dice cuál de los elementos exhibió la propiedad (solo "uno lo hizo"), puedo usarlo some
nuevamente en el cuerpo (O (2n)), o simplemente puedo realizar la operación dentro de la condición if ( lo cual es malo, porque es un efecto secundario dentro de la cabeza).
every
también, por supuesto.