Vous pouvez faire le verdict
renvoie à la fois le score et le verdict dans une seule structure de données. Il peut s'agir d'un tableau avec deux valeurs ou d'un objet simple avec deux propriétés. Voici comment cette dernière idée pourrait fonctionner :
function score (pointsObt, pointsTest) {
return 100 / pointsTest * pointsObt;
};
function verdict (pointsObt, pointsTest) {
let percentage = score (pointsObt, pointsTest);
let message = percentage >= 75 ? "Yay, you did it" : "You did it! But bad.";
return { percentage, message };
};
let { percentage, message } = verdict(50, 50);
console.log (message);
console.log ('Your score: ' + percentage);
Explication
J'ai changé le if...else
à une expression qui utilise la construction opérateur ternaire ( ?
y :
). De cette façon, vous pouvez effectuer une seule mission tout en faisant la distinction entre les deux résultats.
Dans le return
un nouvel objet est créé avec deux propriétés qui correspondent exactement à ce que les variables portant les mêmes noms ont comme valeurs (c'est un objet de type notation littérale des objets courts introduite dans EcmaScript 2015)
L'appelant dans le code principal peut obtenir cet objet à partir de l'appel. J'ai utilisé un affectation destructrice pour extraire immédiatement les deux propriétés de l'objet retourné dans deux variables ayant les mêmes noms que les propriétés de l'objet.
Avantages
Dans votre mise en œuvre, non seulement vous fournissez deux fois les mêmes arguments, mais - ce qui est peut-être plus important - vous calculez deux fois le même score. Dans la solution proposée, score
n'est plus appelé deux fois, mais une seule fois.