Developpez.com - Rubrique JavaScript

Le Club des Développeurs et IT Pro

Exercice 1.2.2 : apprendre les structures conditionnelles JavaScript avec l'instruction "switch"

Par Alain Bontemps

Le 2016-04-18 20:47:11, par vermine, Expert éminent sénior
Exercice 1.2.2 : Les structures conditionnelles avec l'instruction "switch"
Apprendre le JavaScript en interagissant avec les passionnés


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 troisième exercice qui porte sur la structure conditionnelle switch. L'exercice est accompagné d'indications théoriques en guise de cours préalable et d'une solution. Bien entendu, cette solution n'est pas nécessairement unique.

  • Objectif : Manipuler les structures conditionnelles de type switch.
  • Niveau : Facile
  • Exigence : Indispensable


Exercice 1.2.2 : Les structures conditionnelles avec l'instruction "switch"

N'hésitez pas nous faire part de vos remarques, difficultés rencontrées et autres suggestions.

Découvrez également tous nos exercices JavaScript !

Bonne chance !
  Discussion forum
6 commentaires
  • touit
    Membre du Club
    Bonjour,

    Voici ma solution en utilisant if ... else :

    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
    
    var quantity = 2, 
        unit = 'K', 
        result = 0;
    ; 
      
    if (unit = 'K') {
      result = quantity * 1024;
      console.log( "Voici la taille en octets  " + result);
    }
    else if (unit = 'M'){
      result = quantity * 1024 * 1024;
      console.log( "Voici la taille en megaoctets  " + result);}
    else if (unit = 'G') {
      
      result = quantity *1024 * 1024 *1024;
      console.log( "Voici la taille en gigaoctets  " + result);
    }
    else {
      
      console.log("il y a une erreur");
    }
      
      
    console.log(result); // Affiche le résultat (avec les valeurs par défaut, cela donnera 2048).

    Et voici celle en utilisant switch :

    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
    var quantity = 2, 
        unit = 'K', 
        result = 0;
    ; 
    
    
    switch (unit) {
        
      case 'K':
        result = 1024 * quantity;
        console.log( "Voici la taille en octets  " + result);
    
        break;
      case 'M':
        result = 1024 * 1024* quantity ;
        console.log( "Voici la taille en megaoctets  " + result);
        break;
      case 'G':
        result = 1024 * 1024 * 1024 * quantity;
        console.log( "Voici la taille en gigaoctets  " + result):
        break;
      default : 
        console.log("il y a une erreur");
    }
  • Gnuum
    Membre expérimenté
    La résolution avec le if...else ne fonctionne pas. L'exemple que tu as pris t'en donne l'illusion mais ce n'est pas le cas. Pourquoi?

    En fait quand tu fais if(unit ='K'){, tu ne compares pas la variable unit et la valeur 'K' mais tu assigne la valeur 'K' à la variable unit (unit va prendre la valeur 'K' pour le dire autrement). Ensuite le if évalue la valeur de unit qui est une chaîne de caractères non vide et donc évaluée à true. Ce qui fait que tu exécutes les instructions contenue dans ce if.
    Vu que tu as pris comme exemple la lettre K, ton code semble fonctionner. Cependant si tu changes la lettre, tu verras que ton code rentre toujours dans la lettre K.

    C'est un problème classique du jeune programmeur. L'opérateur de comparaison d'égalité n'est pas = mais == ou ===. = sert à assigner une valeur à une variable.
    Une technique qu'utilise certains développeurs pour éviter cette erreur bête (souvent liée à une inattention) mais qui peut faire perdre pas mal de temps est d'inverser la valeur testée et la variable:
    Code javascript :
    1
    2
    if ('K' === unit) { // est équivalent à if (unit === 'K') { 
    if ('K' = unit) { // lève une erreur car tu ne peux pas assigner le contenu d'une variable à une valeur

    Le switch semble être correct, bravo!

    En ce qui concerne ta façon de coder, fais bien attention à respecter des conventions strictes. Ne saute pas des lignes à tel endroit si tu ne le fais pas de la même manière dans un autre endroit similaire, si tu mets un espace devant tes accolades, fais le bien partout, ...
  • Beginner.
    Membre expert
    Salut,

    Je poste ma réponse :

    Code javascript :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    'use strict'; 
      
    var quantity = 2, 
        unit = 'K', 
        result; 
      
      
    if (unit === "K") { 
        result = 1024 * quantity; 
    } 
    else if (unit === "M") { 
        result = 1024 * 1024 * quantity; 
    } 
    else if (unit === "G") { 
        result = 1024 * 1024 * 1024 * quantity; 
    } 
    else if (unit === "T") { 
        result = 1024 * 1024 * 1024 * 1024 * quantity; 
    } 
    else { 
        result = false; 
    } 
      
    console.log("resultat avec if else : " + result); // Affiche le résultat (avec les valeurs par défaut, cela donnera 2048). 
      
    switch (unit) { 
        case 'K': 
            result = 1024 * quantity; 
            break; 
      
        case 'M': 
            result = 1024 * 1024 * quantity; 
            break; 
      
        case 'G': 
            result = 1024 * 1024 * 1024 * quantity; 
            break; 
      
        case 'T': 
            result = 1024 * 1024 * 1024 * 1024 * quantity; 
            break; 
      
        default: 
            result = false; 
    } 
      
    console.log("resultat avec switch : " + result);
  • lijasu
    Nouveau Candidat au Club
    Bonjour,

    je suis grande débutante en Javascript... bref voici ma réponse... si il y a des erreurs n'hésitez pas à me corriger et à m'expliquer... pour que je comprenne... merci d'avance.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    var quantity = 2; 
    var unit = "K"; 
    var result ; 
    
    // avec if .. else
    
    if (unit === "K") {
    	result = quantity * 1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else if (unit === "M") {
    	result = quantity * 1024*1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else if (unit === "G") {
    	result = quantity * 1024*1024*1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else if (unit === "T") {
    	result = quantity * 1024*1024*1024*1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else {
    	console.log("ce n'est pas une valeurs");
    }
    
    // avec switch
    switch (unit){
    	case ("K") :
      	result = quantity * 1024;
      	console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
      case ("M") :
      	result = quantity * 1024*1024;
    		console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
       case ("G") :
       	result = quantity * 1024*1024*1024;
    		console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
       case ("T") :
       	result = quantity * 1024*1024*1024*1024;
    		console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
       default :
       	console.log("ce n'est pas une valeurs");
    }
      
    // TODO: Coder l'algorithme de transformation ici. 
      
    console.log(result); // Affiche le résultat (avec les valeurs par défaut, cela donnera 2048).
  • Gnuum
    Membre expérimenté
    Salut lijasu,

    Déjà ton code fonctionne donc c'est déjà bien!

    La seule remarque importante que je peux te faire, c'est à propos de la factorisation de ton code.
    C'est un des premiers premiers principes que l'on apprend en programmation et qui consiste dans le fait de ne pas dupliquer du code à plusieurs endroits. Une des principales raisons est que si un code dupliqué possède un bug, ce dernier existe alors en plusieurs exemplaires dans l'application. En général, on ne corrige qu'un seul endroit et c'est le drame car le problème revient forcément plusieurs fois (ce qui est généralement très mal vu par les utilisateurs et autres chefs de projet fonctionnel).
    On peut ainsi voir dans ton code, certaines lignes qui se répètent. Par exemple console.log(quantity + unit + " vaut "+ result + " octets.");.
    Voici une manière de factoriser:
    Code JavaScript :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var result = false; 
      
    if (unit === "K") { 
        result = quantity * 1024; 
    } else if (unit === "M") { 
        result = quantity * 1024 * 1024; 
    } else if (unit === "G") { 
        result = quantity * 1024 * 1024 * 1024; 
    } else if (unit === "T") { 
        result = quantity * 1024 * 1024 * 1024 * 1024; 
    } 
      
    if (result !== false) { 
        console.log(quantity + unit + " vaut " + result + " octets."); 
    } else { 
        console.log("ce n'est pas une valeur."); 
    }

    Le reste de mes commentaires vont plus être sur la forme que sur le fond:
    • attention à la précision de tes indentations
    • ton formatage doit être cohérent: e.g. si tu mets un espace avant une accolade, il faut que ce soit le cas tout le temps

    La rigueur de codage est primordiale!

    Au final, l'exercice est plutôt bien réussi donc bravo.
  • NoSmoking
    Modérateur
    Bonjour,
    heureux de voir que les exercices sont encore vus, lus et réalisés.

    Je rebondis sur
    (...) qui consiste dans le fait de ne pas dupliquer du code à plusieurs endroits.
    pour suggérer également cette façon de coder qui consiste à initialiser une variable suivant les cas et de s'en servir en final

    [SPOILER]Bonjour les curieux !
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var quantity = 20,
        unit = "M",
        multi = 0;
    
    if (unit === "K") {
        multi = 1024;
    } else if (unit === "M") {
        multi = 1024 * 1024;
    } else if (unit === "G") {
        multi = 1024 * 1024 * 1024;
    } else if (unit === "T") {
        multi = 1024 * 1024 * 1024 * 1024;
    }
    if (multi !== 0) {    // pour que cela soit clair pour tout le monde
        console.log(quantity + unit + " vaut " + quantity * multi + " octets.");
    } else {
        console.log("ce n'est pas une valeur.");
    }
    [/SPOILER]
    Bonne continuation