Sauf si vs en Javascript avec l'utilisation du point d'exclamation?

Le code ci-dessous tente d'imprimer "est même" pour les nombres divisibles par 2.

Ne devrait-elle pas être si (test) alors() au lieu de: if (!test) alors(), si la condition testée est "n % 2". Le code ci-dessous semble lire "SI les chiffres ne sont PAS divisibles par 2, imprimer 'nombre est même' ", ce qui ne semble pas logique.

De manière plus générale, quels sont les avantages de l'écriture d'un, à Moins que la fonction à l'aide d'une instruction if dans la spécification d'état, lorsque ce que nous pourrions faire est de simplement écrire if (!condition)?

Toute aide est très appréciée.

function unless(test, then) {
  if (!test) then();
}
function repeat(times, body) {
  for (var i = 0; i < times; i++) body(i);
}

repeat(5, function(n) {
  unless(n % 2, function() {
    console.log(n, "is even");
});
//→ 0 is even
//→ 2 is even
//→ 4 is even
% n'a pas de test de divisibilité. C'est un modulo de l'opérateur. Ce code permet de tester si n % 2 évalue à quelque chose qui pourrait être considérée comme fausse (aka 0) et, si oui, il est même.
"Le code ci-dessous tente d'imprimer "est même" pour les nombres divisibles par 2." ne sont pas essayer, . (Au moins, une fois que vous avez corrigé l'erreur de syntaxe à la fin, il le fera.) De toute façon, je suis d'accord que l'idée de "si" n'est pas vraiment du point de vue sémantique pour ce test, mais le code ne ont souhaité en sortie. Ces types de fonctions regardez comme ils appartiennent à un framework de test, vous permettant de faire une assertion et ne quelque chose si l'assertion s'avère faux.
Ce code est horrible, comme en témoigne le fait qu'il n'est même pas clair ce qu'il fait sans une analyse minutieuse. Il n'y a pas d'avantage ici. Je ne peux pas citer des avantages dans le cas général. Peut-être qu'il est avantageux de le faire de cette façon, lorsque votre pointues, cheveux patron dit de le faire de cette façon, ou vous serez congédié. Vous avez besoin pour donner le contexte pour que vous pouvez, pour cette question, pour être viable.

OriginalL'auteur Henry | 2015-01-23