Eu sempre fui ensinado que ter efeitos colaterais em uma ifcondição é ruim. O que eu quero dizer é;
if (conditionThenHandle()) {
// do effectively nothing
}
... em oposição a;
if (condition()) {
handle();
}
... e eu entendo isso, e meus colegas estão felizes porque eu não faço, e todos nós voltamos para casa às 17:00 na sexta-feira e todo mundo tem um fim de semana feliz.
Agora, o ECMAScript5 introduziu métodos como every()e some()para Array, e eu os acho muito úteis. Eles são mais limpos que for (;;;)os outros, oferecem outro escopo e tornam o elemento acessível por uma variável.
No entanto, ao validar a entrada, eu geralmente me encontro usando every/ somena condição de validar a entrada e depois uso every/ some novamente no corpo para converter a entrada em um modelo utilizável;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... quando o que eu quero fazer é;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... o que me causa efeitos colaterais em uma ifcondição ruim.
Em comparação, esse é o código com o qual seria antigo for (;;;);
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Minhas perguntas são:
- Definitivamente, é uma prática ruim?
- Estou (mis | ab) usando
someeevery( devo usar umfor(;;;)para isso?) - Existe uma abordagem melhor?
some, quero fazer algo com o elemento, se eu usar every, quero fazer algo com todos esses elementos ... somee everynão me permita acessar essas informações, para que não possa usá-los, ou eu tenho que adicionar efeitos colaterais.
somena minha ifcondição para determinar se um determinado elemento da matriz exibe uma determinada propriedade, 9/10 eu preciso operar com esse elemento no meu ifcorpo; agora, como somenão me diz qual dos elementos exibia a propriedade (apenas "um fez"), posso usar some novamente no corpo (O (2n)) ou executar a operação dentro da condição if ( o que é ruim, porque é um efeito colateral na cabeça).
everytambém, é claro.