JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 6 · Exercice de TD
Un ISBN ne sert qu'une fois
Classes et modules · niveau 2
Énoncé
Écrire une classe Livre (ISBN, titre) qui refuse, par une exception, de créer deux livres de même ISBN. Elle a une méthode statique fabrique depuisObjet({ isbn, titre }) et un accesseur statique nombre. Quel type de collection choisir pour mémoriser les ISBN déjà vus ?
Corrigé
class Livre {
static #isbnConnus = new Set();
constructor(isbn, titre) {
if (Livre.#isbnConnus.has(isbn)) {
throw new Error(`ISBN déjà utilisé : ${isbn}`);
}
Livre.#isbnConnus.add(isbn);
this.isbn = isbn;
this.titre = titre;
}
static depuisObjet({ isbn, titre }) {
return new Livre(isbn, titre);
}
static get nombre() {
return Livre.#isbnConnus.size;
}
}
const donnees = [
{ isbn: "9782956300014", titre: "Programmation Java" },
{ isbn: "9782956300052", titre: "Le Petit Prince" },
{ isbn: "9782956300014", titre: "Programmation Java (bis)" },
];
for (const d of donnees) {
try {
console.log(Livre.depuisObjet(d).titre);
} catch (erreur) {
console.log(erreur.message);
}
}
console.log(Livre.nombre);
Programmation Java
Le Petit Prince
ISBN déjà utilisé : 9782956300014
2
Un Set : on ne veut savoir que si un ISBN a déjà été vu, et has est immédiat. Le champ statique privé empêche tout code extérieur de vider ou de modifier cet ensemble. Le troisième livre est refusé et n'est pas compté.
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.