Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Erreur] Apprenez à programmer avec JavaScript

Sujet résolu
13 septembre 2022 à 16:46:45

Bonjour à tous. Désolé pour le manque de précision dans le titre, le nombre de caractère étant limité, je vais simplement décrire mon problème ici. Je suis donc au TP de validation du module "Apprenez à programmer avec JavaScript, ou le but est d'aider à réaliser un guide de suivi de livres lues ou non. J'ai réalisé le code de celui-ci, que je vais vous montrer juste ici : 

export class Book {
   constructor(title, author, description, pages, currentPage, read) {
     this.title = title;
     this.author = author;
     this.description = description;
     this.pages = pages;
     this.currentPage = currentPage;
     this.read = read;
   }
 
   readBook(page) {
     if(page > 1 || page > this.pages)
      return 0;
 
      if(page > 0 && < this.pages) {
        this.currentPage = page;
        return 1;
      }
      if (page == this.pages) {
        this.currentPage = page;
        this.read = true;
        return 1;
      }
   }
}
 
const livre1 = new Book("Les Chevaliers d'Emeraude Tome 1: Le Feu dans le Ciel", "Anne Robillard", "Fantasy",325, 131, false);
 
const livre2 = new Book("Les Chevaliers d'Emeraude Tome 2: Les Dragons de L'Empreur Noir", "Anne Robillard", "Fantasy",435 , 0, false);
 
const livre3 = new Book( "Les Chevaliers d'Emeraude Tome 3: Piege au Royaume des Ombres", "Anne Robillard", "Fantasy",425 , 0, false);
 
export const books = [livre1, livre2, livre3];



Ce code doit afficher les livres dans un carrousel, que je vais vous montrer ici :

Le problème est qu'il n'y en a pas, il n'y a aucune erreur affiché dans le code, mais pourtant les livres ne s'affichent pas dans le carrousel. Pourriez-vous m'aider s'il vous plaît ? Merci d'avance pour vos réponses. Si vous avez des questions ou des demandes n'hésitez pas je vous répondrai le mieux possible.

Cordialement,

Florian

-
Edité par Florian0985 17 septembre 2022 à 15:50:38

  • Partager sur Facebook
  • Partager sur Twitter
13 septembre 2022 à 20:08:37 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


17 septembre 2022 à 1:45:50

Salut à toi,

Sans m'intéresser en profondeur à la logique de ton code, je remarque quelques erreurs de syntaxes qui fausseraient le résultat. Les conditions sur la ligne 24 et 27 notamment. Elle devraient être écrites ainsi:

if(page < 1 && page > this.pages) {
else if (page >= 1 && page < pages) {

Essaie de corriger ça et revoit ta logique si nécessaire.

Cordialement,

  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2022 à 16:02:51

LK13 a écrit:

Salut à toi,

Sans m'intéresser en profondeur à la logique de ton code, je remarque quelques erreurs de syntaxes qui fausseraient le résultat. Les conditions sur la ligne 24 et 27 notamment. Elle devraient être écrites ainsi:

if(page < 1 && page > this.pages) {
else if (page >= 1 && page < pages) {

Essaie de corriger ça et revoit ta logique si nécessaire.

Cordialement,

Bonjour LK13,

Merci pour ta réponse ! J'ai l'impression que le code que tu veux que je modifie avec celui ecrit dans ton message sont les mêmes. Quoi qu'il en soit, j'ai remodifié le code avec celui que j'ai vu dans la vidéo de NadfriJS, qui fonctionne dans sa vidéo mais pas dans mon exercice, si tu pourrais y jeter un oeil et me redire s'il y a une erreur dans celui-ci s'il te plait ? 

Cordialement,

Florian



  • Partager sur Facebook
  • Partager sur Twitter
17 septembre 2022 à 22:18:28

Ce n'est qu'une impression. les symboles && et < ne peuvent se suivre car ça ne sera pas logique. && permet d'unir deux expression logiques et "< this.pages" n'est pas une expression complète.

Là tu compare pages et this.pages à rien du tout donc ça peut pas marcher. Je suppose que tu voulais le comparer au même élément que la première expression. Si c'est le cas, le code que je t'ai proposé marchera.

Je suis aller voir l'exercice en question pour comprendre le contexte. Voici ma solution fonctionnelle:

readBook(page) {
     if(page < 1 || page > this.pages)
      return 0;
  
      if(page > 0 && page < this.pages) {
        this.currentPage = page;
        return 1;
      }
      if (page === this.pages) {
        this.currentPage = page;
        this.read = true;
        return 1;
      }
   }

Il est demandé de retourner 0 si page est inférieur à un ou supérieur au nombre total de pages du livre. Dans ta condition tu as mis page > 1 au lieu de page < 1.

En dehors de ça, j'ai juste corrigé les conditions comme je l'ai expliqué plus haut.

Pour la dernière condition, je préfère utiliser === au lieu de ==. Le === vérifie que les éléments à comparer soient de même type avant de faire la comparaison, ça peut éviter énormément de surprises. Le == par contre va essayer de convertir l'un ou l'autre pour pouvoir comparer et c'est parfois imprévisible. Par ailleurs, cette conversion va prendre un peu de temps donc === sera légèrement plus rapide. A cette échelle c'est imperceptible mais quand ton application atteint des milliers de lignes de code, les millisecondes perdues s'additionnent rapidement.

J'espère que mes explications sont assez claires.

Bon courage à toi.

  • Partager sur Facebook
  • Partager sur Twitter
19 septembre 2022 à 15:46:47

LK13 a écrit:

Ce n'est qu'une impression. les symboles && et < ne peuvent se suivre car ça ne sera pas logique. && permet d'unir deux expression logiques et "< this.pages" n'est pas une expression complète.

Là tu compare pages et this.pages à rien du tout donc ça peut pas marcher. Je suppose que tu voulais le comparer au même élément que la première expression. Si c'est le cas, le code que je t'ai proposé marchera.

Je suis aller voir l'exercice en question pour comprendre le contexte. Voici ma solution fonctionnelle:

readBook(page) {
     if(page < 1 || page > this.pages)
      return 0;
  
      if(page > 0 && page < this.pages) {
        this.currentPage = page;
        return 1;
      }
      if (page === this.pages) {
        this.currentPage = page;
        this.read = true;
        return 1;
      }
   }

Il est demandé de retourner 0 si page est inférieur à un ou supérieur au nombre total de pages du livre. Dans ta condition tu as mis page > 1 au lieu de page < 1.

En dehors de ça, j'ai juste corrigé les conditions comme je l'ai expliqué plus haut.

Pour la dernière condition, je préfère utiliser === au lieu de ==. Le === vérifie que les éléments à comparer soient de même type avant de faire la comparaison, ça peut éviter énormément de surprises. Le == par contre va essayer de convertir l'un ou l'autre pour pouvoir comparer et c'est parfois imprévisible. Par ailleurs, cette conversion va prendre un peu de temps donc === sera légèrement plus rapide. A cette échelle c'est imperceptible mais quand ton application atteint des milliers de lignes de code, les millisecondes perdues s'additionnent rapidement.

J'espère que mes explications sont assez claires.

Bon courage à toi.

Bonjour,

Merci beaucoup pour ta correction, j'ai réussi l'exercice grâce à toi ! Je vais mettre mon sujet comme résolu ! Et merci pour tes explications qui sont très claires ! Bonne journée à toi et encore merci,

Cordialement,

Florian

-
Edité par Florian0985 19 septembre 2022 à 15:47:32

  • Partager sur Facebook
  • Partager sur Twitter