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

Le , par vermine, Responsable Jeux-Concours
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 !


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse Signaler un problème

Avatar de touit touit - Membre du Club https://www.developpez.com
le 02/05/2016 à 12:38
Bonjour,

Voici ma solution en utilisant if ... else :

Code : Sélectionner tout
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 : Sélectionner tout
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");
}
Avatar de Gnuum Gnuum - Membre expérimenté https://www.developpez.com
le 14/05/2016 à 9:15
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 : Sélectionner tout
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, ...
Avatar de Beginner. Beginner. - Membre chevronné https://www.developpez.com
le 28/05/2016 à 19:23
Salut,

Je poste ma réponse :

Code javascript : Sélectionner tout
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);
Avatar de lijasu lijasu - Nouveau Candidat au Club https://www.developpez.com
le 06/02/2018 à 14:50
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 : Sélectionner tout
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).
Avatar de Gnuum Gnuum - Membre expérimenté https://www.developpez.com
le 06/02/2018 à 15:27
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 : Sélectionner tout
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.
Avatar de NoSmoking NoSmoking - Modérateur https://www.developpez.com
le 06/02/2018 à 19:24
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 : Sélectionner tout
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
Contacter le responsable de la rubrique JavaScript