Freecodecamp: Bug in Challenge: utilisez plusieurs opérateurs conditionnels (ternaires).

Créé le 22 mai 2020  ·  16Commentaires  ·  Source: freeCodeCamp/freeCodeCamp


Décrivez votre problème et comment le reproduire:
Bug - Le test du code ci-dessous échoue avec une erreur: checkSign doit utiliser plusieurs opérateurs conditionnels.

function checkSign(num) {
  return (num!==0) ?(num>0) ? "positive" 
    : "negative" 
    : "zero";
}


console.log(checkSign(10));
console.log(checkSign(-10));
console.log(checkSign(0));

Capture d'écran -1:
image

Capture d'écran - 2:
image

Comment le reproduire.
Au lieu d'erreur: "checkSign doit utiliser plusieurs opérateurs conditionnels."
L'erreur devrait être: l'utilisation de plusieurs opérateurs ternaires dans la partie instruction-if-true de l'opérateur ternaire n'est pas la meilleure pratique.

(Augmentation de la clarté du message d'erreur)

Ajoutez un lien vers la page avec le problème:
Lien vers le défi ;
Lien vers mon message de rapport de bogue sur le forum:

first timers only help wanted learn

Commentaire le plus utile

"Il est recommandé de formater les multiples opérateurs conditionnels de sorte que chaque condition se trouve sur une ligne distincte, comme indiqué dans l'exemple, pour plus de lisibilité."

Je serais pour ajouter une note similaire.

Tous les 16 commentaires

Je conviens que certains ajustements ont du sens. J'aiderais si nous pouvons capturer le fait que le test échoue si a) vous n'utilisez pas un ternaire multiple ou b) le ternaire n'est pas dans le format attendu.

Je ne pense pas que ce soit ce que le défi demande: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Voici le code de la documentation:

function example(…) {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

Ce que vous avez construit est:

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Je suis d'accord, vous avez _accompli_ la tâche. Cependant, la logique implémentée attendue est de la forme:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Alors, peut-être devrions-nous changer les instructions de défi pour être plus spécifiques quant au format ...

Je ne pense pas que ce soit ce que le défi demande: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Voici le code de la documentation:

function example(…) {
    return condition1 ? value1
         : condition2 ? value2
         : condition3 ? value3
         : value4;
}

Ce que vous avez construit est:

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Je suis d'accord, vous avez _accompli_ la tâche. Cependant, la logique implémentée attendue est de la forme:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Alors, peut-être devrions-nous changer les instructions de défi pour être plus spécifiques quant au format ...

Monsieur, veuillez noter: ce dépôt est de Free Code Camp . Merci pour votre réponse.

@FelixBoscoJ , haha. Oui, j'en suis bien conscient. J'ai lié à la documentation de Mozilla pour récupérer un exemple d'opérateurs ternaires conditionnels multiples.

Mon argument est toujours tout à fait valable.

@FelixBoscoJ , haha. Oui, j'en suis bien conscient. J'ai lié à la documentation de Mozilla pour récupérer un exemple d'opérateurs ternaires conditionnels multiples.

Mon argument est toujours tout à fait valable.

`` `js
function checkSign (num) {
return (num! == 0)? (num> 0)? "positif"
: "négatif"
: "zéro";
}

console.log (checkSign (10));
console.log (checkSign (-10));
console.log (checkSign (0));

`` ``
Veuillez essayer le code ci-dessus dans ce défi . Veuillez vérifier ce qui est requis pour réussir le défi.

@FelixBoscoJ , j'ai, et je comprends exactement pourquoi ce problème a été créé. Je souligne que le format de votre solution n'est pas celui attendu, ce qui est clairement visible dans l'exemple donné dans la leçon:

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Je suis d'accord, vous avez accompli la tâche. Cependant, la logique implémentée attendue est de la forme:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Votre solution ne contient pas else if logique

@FelixBoscoJ , j'ai, et je comprends exactement pourquoi ce problème a été créé. Je souligne que le format de votre solution n'est pas celui attendu, ce qui est clairement visible dans l'exemple donné dans la leçon:

function checkSign(num) {
  if (num!==0) {
    if (num>0) {
      return "positive";
    } else {
      return "negative";
    }
  } else {
    return "zero";
  }
}

Je suis d'accord, vous avez accompli la tâche. Cependant, la logique implémentée attendue est de la forme:

function findGreaterOrEqual(a, b) {
  if (a === b) {
    return "a and b are equal";
  }
  else if (a > b) {
    return "a is greater";
  }
  else {
    return "b is greater";
  }
}

Votre solution ne contient pas else if logique

Monsieur, la condition pour gagner le défi est:

Utilisez plusieurs opérateurs conditionnels dans la fonction checkSign pour vérifier si un nombre est positif, négatif ou nul.

Nous devrions utiliser plusieurs opérateurs conditionnels ( ternaires ).

Le message d'erreur devrait peut-être être "... plusieurs opérateurs conditionnels dans le format recommandé".

Et peut-être en ajoutant une note du type "Il est recommandé de mettre en forme les multiples opérateurs conditionnels afin que chaque condition soit sur une ligne distincte, comme indiqué dans l'exemple, pour plus de lisibilité."

"Il est recommandé de formater les multiples opérateurs conditionnels de sorte que chaque condition se trouve sur une ligne distincte, comme indiqué dans l'exemple, pour plus de lisibilité."

Je serais pour ajouter une note similaire.

Fermé? Une mise à jour de la description a-t-elle été fusionnée?

@ Sky020 Il n'est pas possible d'implémenter la logique if / else if / else en utilisant l'opérateur ternaire. Mais la tâche peut être accomplie.

Je suis d'accord, vous avez accompli la tâche. Cependant, la logique implémentée attendue est de la forme:

 function findGreaterOrEqual(a, b) {
   if (a === b) {
     return "a and b are equal";
   }
   else if (a > b) {
     return "a is greater";
   }
   else {
     return "b is greater";
   }
 }

Non, la logique implémentée attendue est de la forme:
`` `js
function findGreaterOrEqual (a, b) {

si (a === b) {
retourne "a et b sont égaux";
}
autre {
if (num> 0) {
retourne "positif";
} autre {
retourne "négatif";
}
}
}

''

@FelixBoscoJ

Solution attendue (une des 6, très similaire à votre réponse finale):

function checkSign(num) {
  return (num > 0) ? "positive" 
    : (num < 0) ? "negative"
    : "zero";
}

Version if-else

function checkSign(num) {
  if (num > 0) {
    return "positive";
 } else if (num < 0) {
    return "negative";
 } else {
    return "zero";
 } 
}

Un ternaire, ou un ternaire multiple, peut toujours être écrit avec if-else. Le défi et la description sont précis. Nous voulons simplement ajouter un commentaire de clarification ou deux pour souligner les meilleures pratiques de mise en forme pour la lisibilité.

Ça ne fait rien.

Il me semble que l'ajout de commentaires de clarification est la meilleure solution. Alors, laissons cela ouvert jusqu'à ce qu'un PR soit fusionné.

J'aimerais sauter là-dessus, si possible. Je suis novice mais vraiment impatient d'apprendre!

Allez-y, @jasnkwcz. Cela devrait être un bon problème pour un débutant.

Je recommande de jeter un œil au guide de contribution , et si vous êtes bloqué, demandez dans la salle de discussion du contributeur

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

jurijuri picture jurijuri  ·  3Commentaires

SaintPeter picture SaintPeter  ·  3Commentaires

trashtalka3000 picture trashtalka3000  ·  3Commentaires

robwelan picture robwelan  ·  3Commentaires

MichaelLeeHobbs picture MichaelLeeHobbs  ·  3Commentaires