Siempre me han enseñado que tener efectos secundarios en una ifafecció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/ someen 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 ifcondició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
someyevery(¿ 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 ... somey everyno me dejen acceder a esa información, así que tampoco puedo los uso, o tengo que agregar efectos secundarios.
someen mi ifcondición para determinar si un determinado elemento de la matriz exhibe una cierta propiedad, 9/10 necesito para operar en ese elemento en mi ifcuerpo; ahora, como someno 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).
everytambién, por supuesto.