JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 6 · Application directe du cours
Réserver dans un stock
Classes et modules · niveau 2
Énoncé
Écrire une classe Stock à deux champs privés, la quantité en rayon et la quantité réservée. L'accesseur disponible rend leur différence ; reserver(n) réserve si c'est possible et rend true, sinon false sans rien changer ; annuler(n) libère n réservations (sans descendre sous zéro). Que se passe-t-il si l'on écrit s.disponible = 99 ?
Corrigé
class Stock {
#disponible;
#reserve = 0;
constructor(quantite) {
this.#disponible = quantite;
}
get disponible() {
return this.#disponible - this.#reserve;
}
reserver(n) {
if (n > this.disponible) {
return false;
}
this.#reserve += n;
return true;
}
annuler(n) {
this.#reserve = Math.max(0, this.#reserve - n);
}
}
const s = new Stock(5);
console.log(s.reserver(3), s.disponible);
console.log(s.reserver(3), s.disponible);
s.annuler(10);
console.log(s.disponible);
s.disponible = 99;
true 2
false 2
5
Uncaught TypeError: Cannot set property disponible of #<Stock> which has only a getter
La seconde réservation de 3 échoue (il n'en reste que 2) et ne change rien ; annuler(10) ramène les réservations à 0 grâce à Math.max. disponible n'a pas de mutateur : dans un module (mode strict), l'affectation lève une TypeError. C'est voulu : la valeur est calculée, on ne peut pas l'imposer.
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.