Question

J'ai toujours appris que le fait d'avoir des effets secondaires dans un if les conditions sont mauvaises. 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 à 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 (;;;)'S, donnez-vous une autre portée, et rendre l'élément accessible par une variable.

Cependant, lors de la validation de l'entrée, je ne me retrouve plus loin que every/some Dans l'état de valider l'entrée, puis utilisez every/some encore 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 vouloir faire 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, condition, ce qui est mauvais.

En comparaison, c'est le code avec un vieux 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:

  1. Est-ce vraiment une mauvaise pratique?
  2. Suis-je (mis | ab) en utilisant some et every (devrait J'utilise un for(;;;) pour ça?)
  3. Est-ce qu'il y a une meilleure approche?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top