JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 6 · Exercice de TD
Codes de réduction
Classes et modules · niveau 3 (difficile)
Énoncé
Sans modifier la classe Panier de la Librairie, écrire une sous-classe PanierAvecCodes dont la méthode appliquerCode(code) accepte « RENTREE10 » (10 %) et « ETUDIANT5 » (5 %), sans tenir compte de la casse ni des espaces, et rend false pour un code inconnu. Les codes ne se cumulent pas : seule la plus forte réduction s'applique. Redéfinir total en réutilisant celui de la classe mère.
Corrigé
import { Panier } from "../librairie/panier.mjs";
// Une sous-classe ajoute les codes de réduction sans toucher à Panier.
class PanierAvecCodes extends Panier {
static CODES = new Map([
["RENTREE10", 0.1],
["ETUDIANT5", 0.05],
]);
#reduction = 0;
appliquerCode(code) {
const taux = PanierAvecCodes.CODES.get(code.trim().toUpperCase());
if (taux === undefined) {
return false;
}
this.#reduction = Math.max(this.#reduction, taux);
return true;
}
total(livres) {
return Math.round(super.total(livres) * (1 - this.#reduction) * 100) / 100;
}
}
const livres = [{ isbn: "a", prix: 32 }, { isbn: "b", prix: 8.5 }];
const p = new PanierAvecCodes();
p.ajouter("a");
p.ajouter("b", 2);
console.log(p.total(livres));
console.log(p.appliquerCode("bidon"), p.appliquerCode(" rentree10 "), p.total(livres));
console.log(p.appliquerCode("ETUDIANT5"), p.total(livres));
49
false true 44.1
true 44.1
Sans code : . Avec 10 % : . Le code à 5 % est accepté mais ne change rien, Math.max gardant la plus forte réduction. La sous-classe n'a pas accès au champ privé #lignes de Panier (un champ privé n'est visible que dans la classe qui le déclare) : elle passe par super.total.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.