On m'a toujours appris qu'avoir des effets secondaires dans une ifcondition était mauvais. Ce que je veux dire est;
if (conditionThenHandle()) {
// do effectively nothing
}
... par opposition à;
if (condition()) {
handle();
}
... et je comprends cela, et mes collègues sont heureux parce que je ne le fais pas, et nous rentrons tous chez nous à 17h00 un vendredi et tout le monde a un joyeux week-end.
Maintenant, ECMAScript5 a introduit des méthodes comme every()et some()à Array, et je les trouve très utiles. Ils sont plus propres que for (;;;)les autres, vous donnent une autre portée et rendent l'élément accessible par une variable.
Cependant, lors de la validation de l'entrée, je me retrouve le plus souvent à utiliser every/ somedans la condition pour valider l'entrée, puis à utiliser every/ à some nouveau dans le corps pour convertir l'entrée en un modèle utilisable;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... quand ce que je veux faire, c'est;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... ce qui me donne des effets secondaires dans un ifétat, ce qui est mauvais.
En comparaison, c'est le code qui ressemblerait à un ancien for (;;;);
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Mes questions sont:
- Est-ce définitivement une mauvaise pratique?
- Suis-je (mis | ab) en utilisant
someetevery( devrais- je utiliser unfor(;;;)pour cela?) - Est-ce qu'il y a une meilleure approche?
some, je veux faire quelque chose avec l'élément, si j'utilise every, je veux faire quelque chose avec tous ces éléments ... someet everyne me laisse pas accéder à cette information, donc soit je ne peux pas les utiliser, ou je dois ajouter des effets secondaires.
somedans mon ifétat pour déterminer si un certain élément du tableau présente une propriété, 9/10 je dois fonctionner sur cet élément dans mon ifcorps; maintenant, comme somene me dites pas que des éléments exposés la propriété (juste « un fait »), je peux soit utiliser à some nouveau dans le corps (O (2n)), ou je peux effectuer l'opération à l' intérieur du si la condition ( ce qui est mauvais, car c'est un effet secondaire dans la tête).
everymême, bien sûr.