Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →