Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Responsable Jeux-Concours

    [Intermédiaire][Indispensable] Exercice 1.2.3 : Les particularités du switch et l'utilisation des standards
    Exercice 1.2.3 : Les particularités du switch et l'utilisation de la bibliothèque standard
    Apprendre le JavaScript de manière pédagogique


    Bonjour,

    Nous sommes en train de mettre en place une série d'exercices pour apprendre le JavaScript et Node.js.

    Autran, Gnuum et ABCIWEB ont participé à la rédaction de ce quatrième exercice qui porte sur les particularités de la structure conditionnelle switch. L'exercice est accompagné d'un petit cours théorique et vous propose une solution.

    • Objectif : Manipuler les structures conditionnelles de manière avancée.
    • Niveau : Intermédiaire
    • Exigence : Indispensable


    Exercice 1.2.3 : Les particularités du switch et l'utilisation de la bibliothèque standard

    N'hésitez pas nous faire part de vos remarques, difficultés rencontrées et autres suggestions. Les auteurs répondront à vos questions et vous guideront dans la réalisation d'une solution idéale.

    Découvrez également tous nos exercices JavaScript !

    Bon boulot !

  2. #2
    Membre du Club
    Merci pour ces exercices, qui me semblent plus simple que ceux du blog d'Autran, bientot la suite ?

  3. #3
    Membre expert
    Salut Touit,

    Tu as déjà fait tous les exercices ? Tu as été rapide ! Bravo !

    Par contre tu ne postes pas tes réponses si j'ai bien compris ?

  4. #4
    Membre du Club
    Salut ! Merci, non je les ai pas postes car je n avais pas vu jusqu a hier qu on pouvait poster. Du coup je vais les refaire demain et poster mes réponses

  5. #5
    Membre expert
    Salut tout le monde,

    @Touit : Tu as pris de l'avance à ce que je vois, il va falloir que je m'y remette !

  6. #6
    Membre expérimenté
    On va essayer de faire arriver la suite des exercices rapidement! Désolé pour le petit retard!
    color{gnu: ["[/COLOR]um", "cki"]}

  7. #7
    Membre du Club
    Salut

    Je n'ai pas pris trop d'avances Beginner, j'apprends php en même temps. Et ces derniers temps j'ai beaucoup été dessus.

    J'attends les nouveaux exercices avec plaisir

  8. #8
    Membre du Club
    Bonsoir !!

    Je ne comprends pas trop la solution de l'exercice au final car même si j'y était presque, j'ai du regarder la solution... Je comprend a quoi tout cela sert tout ce que j'ai appris jusqu'à présent mais ca reste compliqué à mettre en place, c'est un peu comme un puzzle, on a les pièces mais pas facile de les placé la ou il faut :/
    De plus je ne crois pas avoir bien compris le switch au final... De ce que j'ai compris, si il n'y a pas de break alors il va passer au case d'en dessous en gardant la valeur jusqu'au prochain break ? Mais dans l'exercice le T de terra est tout en haut et devrait donc donné un petit chiffre (bytes = bytes * 1024) mais il donne bien un chiffre énorme et si ce n'est pas un T alors c'est en dessous et donc va garder la valeur du premier bytes et refaire le même calcul jusqu'a tomber sur la bonne case ou le break.. Mais plus ca "descend" plus le chiffre diminue... j'avoue ne pas saisir :/
    Pour conclure dans l’énoncé il y a une variable number qui disparait dans la réponse... du coup j'suis un peu perdu...

  9. #9
    Membre du Club
    Voici le code que j'ai écris


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    var shortenBytes = '10t'; 
    var letter = shortenBytes.substr(-1, 1); 
    var bytes; 
    var number = Number.parseInt(shortenBytes, 10); 
     
    //console.log(letter)  
     
    if (isNaN(number)){
        bytes =  false
    }else if (number != isNaN){
     
    switch (letter.toUpperCase()) { 
        case 'K':
            bytes = number * 1024;
            break;
        case 'M':
            bytes = number * 1024 * 1024;
            break;
        case 'G':
            bytes = number * 1024 * 1024 * 1024;
            break;
        case 'T':
            bytes = number * 1024 * 1024 * 1024 * 1024;
            break;
        default:
            bytes = false; 
    } 
    }
     
    console.log(bytes);

  10. #10
    Candidat au Club
    exercice 1.2.3
    Bonjour,
    L'exercice est très intéressant et instructif. On trouve rarement des exercices sur JS afin de mettre en pratique les apports théoriques. Un grand merci donc.
    A quand un bootcamp virtuel où on ferait des TP à longueur de journée pour assimiler et graver durablement la syntaxe JS ?!
    En tous les cas, il y a un point qui m'échappe dans votre correction.
    A supposer en effet qu'on n'ait pas renseigné d'unité, n'aurait-on pas dû tomber sur default dans le switch ?

    J'ai d'abord tenté ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var nombreUniteMesure = '150';
    var nombre = nombreUniteMesure.substr(0,--nombreUniteMesure.length);
    var number = +nombre; 
    var uniteMesure = nombreUniteMesure.substr(-1,1);
    switch (uniteMesure.toUpperCase()){ 
        case ' '://"Si on n'indique pas d'unité', on suppose que la var testée indique des octets"
        result = number;
        break;
      case 'K':
        result = number*1024;
        break;
      case 'M':
        result = number*Math.pow(1024,2);
        break; 
      case 'G':
        result = number*Math.pow(1024,3);
        break;   
      case 'T':
        result = number*Math.pow(1024,4);
        break;  
      default:
        result=(!true)
    }
    console.log(result);


    "Globalement", ça fonctionne. Certes, l'approche est infiniment moins pertinente que votre solution...
    Mais par contre, on tombe sur default si on n'indique pas d'unité. J'ai essayé avec case undefined (pas d'unité de mesure indiquée) et on tombe aussi sur default.
    Pourriez-vous éclairer ma lanterne ?
    Merci d'avance
    maed

  11. #11
    Modérateur

    Bonjour,
    Mais par contre, on tombe sur default si on n'indique pas d'unité.
    regarde simplement pour commencer ce que donne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var nombreUniteMesure = '150';
    //  var nombre = nombreUniteMesure.substr(0,--nombreUniteMesure.length);
    //  var number = +nombre; 
    var uniteMesure = nombreUniteMesure.substr(-1,1);
    console.log(uniteMesure);

    surement pas ce à quoi tu t'attends !

  12. #12
    Candidat au Club
    Bonjour NoSmoking,

    D'abord merci pour ta réponse

    Oui, je m'attends à avoir pour retour 0.
    Mais mon switch fait sa besogne si et seulement si on ajoute une lettre (uniteMesure) comme suit :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    var nombreUniteMesure = '150k';


    Seulement, je n'arrive pas à répondre à la dernière partie de la question 1 de l'exercice 1.2.3 "Si l'on n’indique pas d'unité, par exemple : var shortenBytes = '887';, on supposera que la variable testée indique des octets". Et si on reprend la solution donnée avec le fameux //fall trough

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    var shortenBytes = '150k'; 
    var letter = shortenBytes.substr(shortenBytes.length - 1); // Retourne le dernier caractère 
    var bytes = parseInt(shortenBytes, 10); // Convertit la chaîne de caractères '150K' en le nombre 150. 
     
    // Gère le cas où shortenBytes n'est pas une valeur numérique convertissable. 
    if (isNaN(bytes)) { 
        bytes = false; 
    // Gère le cas où le dernier caractère de `shortenBytes` est une lettre. 
    } else if (isNaN(letter)) { 
        // Teste la valeur de la lettre mise en majuscule. 
        switch (letter.toUpperCase()) { 
            case 'T': 
                bytes *= 1024; // Multiplie par 1024. 
                //fall through 
            case 'G': 
                bytes *= 1024; // Multiplie par 1024. 
                //fall through 
            case 'M': 
                bytes *= 1024; // Multiplie par 1024. 
                //fall through 
            case 'K': 
                bytes *= 1024; // Multiplie par 1024. 
                break; // Sort du switch. 
            default: 
                bytes = false; // Renvoie false si la lettre est inconnue. 
        } 
    } 
     
    console.log(bytes);

    Pour moi, l'absence d'unité ne correspondant à aucun des cas du switch, je ne comprends vraiment pas pourquoi on n'a pas false pour retour.
    Et cependant le code fonctionne bien si on ne met pas d'unité.
    Je n'arrive pas à comprendre comment...
    Bien à toi
    maed

  13. #13
    Modérateur

    Pour moi, l'absence d'unité ne correspondant à aucun des cas du switch
    tu as raison mais tu ne passe pas dans les swicth.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (isNaN(bytes)) {
      // on ne passe ici que si « bytes » n'est pas un nombre
    }
    else if (isNaN(letter)) {
      // on ne passe ici que si « bytes » est bien numérique
      // et
      // si « letter » n'est pas un chiffre
    }

###raw>template_hook.ano_emploi###