Gli effetti collaterali sono "tutti" o "alcuni" cattivi?
https://softwareengineering.stackexchange.com/questions/186497
-
05-11-2019 - |
Domanda
Mi è sempre stato insegnato che avere effetti collaterali in un if
le condizioni sono cattive. Ciò che voglio dire è;
if (conditionThenHandle()) {
// do effectively nothing
}
... al contrario di;
if (condition()) {
handle();
}
... E lo capisco, e i miei collegi sono felici perché non lo faccio, e torniamo a casa alle 17:00 di venerdì e tutti hanno un buon fine settimana.
Ora, ECMascript5 ha introdotto metodi come every()
e some()
a Array
, e li trovo molto utili. Sono più puliti di for (;;;)
darti un altro ambito, e rendere l'elemento accessibile da una variabile.
Tuttavia, quando si convalidano l'input, non mi trovo più spesso usando every
/some
Nella condizione per convalidare l'input, quindi utilizzare every
/some
ancora Nel corpo per convertire l'input in un modello utilizzabile;
if (input.every(function (that) {
return typeof that === "number";
})) {
input.every(function (that) {
// Model.findById(that); etc
}
} else {
return;
}
... quando quello che io volere fare è;
if (!input.every(function (that) {
var res = typeof that === "number";
if (res) {
// Model.findById(that); etc.
}
return res;
})) {
return;
}
... che mi dà effetti collaterali in un if
, condizione, il che è cattivo.
In confronto, questo è il codice con un vecchio for (;;;)
;
for (var i=0;i<input.length;i++) {
var curr = input[i];
if (typeof curr === "number") {
return;
}
// Model.findById(curr); etc.
}
Le mie domande sono:
- È sicuramente una cattiva pratica?
- Sono (mis | ab) usando
some
eevery
(dovrebbe Sto usando unfor(;;;)
per questo?) - C'è un approccio migliore?
Nessuna soluzione corretta