Developpez.com - Rubrique JavaScript

Le Club des Développeurs et IT Pro

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

Par Alain Bontemps

Le 2016-04-18 20:48:37, par vermine, Expert éminent sénior
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 !
  Discussion forum
12 commentaires
  • touit
    Membre du Club
    Merci pour ces exercices, qui me semblent plus simple que ceux du blog d'Autran, bientot la suite ?
  • Beginner.
    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 ?
  • touit
    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
  • Beginner.
    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 !
  • Gnuum
    Membre expérimenté
    On va essayer de faire arriver la suite des exercices rapidement! Désolé pour le petit retard!
  • touit
    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
  • d3LTa7
    Membre régulier
    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...
  • d3LTa7
    Membre régulier
    Voici le code que j'ai écris

    Code :
    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);
  • maedgipa
    Candidat au Club
    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 :
    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
  • NoSmoking
    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 :
    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 !