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:

  1. È sicuramente una cattiva pratica?
  2. Sono (mis | ab) usando some e every (dovrebbe Sto usando un for(;;;) per questo?)
  3. C'è un approccio migliore?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top