Bien, il est temps de mettre un peu en pratique ce que vous venez d'apprendre.
Exercice
Le script que vous allez créer est un script du SdZ... Oui, vous avez bien entendu ! C'est un script qui est utilisé sur ce site

.
Le sujet
Vous avez tous utilisé au moins une fois le zCode...
Nous allons nous intéresser ici au bouton servant à insérer une liste à puces.
Notre script a pour rôle de demander le contenu de chaque puce à l'utilisateur, et de créer le zCode correspondant.
Quelques consignes pour vous guider
On va demander le contenu de chaque puce grâce à
prompt().
C'est ici qu'on va devoir utiliser une boucle : on demande
tant que l'utilisateur ne laisse pas le champ vide.
Au final, on va récupérer le zCode dans une variable.
On l'affichera grâce à
alert() pour vérifier le fonctionnement du script.
À vous de jouer

.
Correction
Je n'ai pas fait une, mais plusieurs corrections, plus ou moins bonnes.
Version 1 : "bof bof"
Voici ce qu'on peut obtenir après une petite réflexion :
Code : JavaScript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | // initialisations
var zCode = '<liste>\n';
var saisie = '';
// boucle
do
{
saisie = prompt("Contenu de la puce ?");
if(saisie)
zCode += "<puce>" + saisie + "</puce>\n";
}while(saisie);
// fin
zCode += "</liste>";
alert(zCode);
|
Plusieurs points ne sont pas très "propres".
Tout d'abord, si on ne remplit aucune puce, on se retrouve avec ceci :
Code : Zcode
Certes, un "détail", mais si facile à corriger que c'est dommage de le laisser comme ça.
Autre remarque : à quelques lignes près, on voit deux fois le même test :
if(saisie) et
while(saisie).
Ce n'est jamais bien bon de se répéter (par exemple, si on doit modifier la condition, c'est un peu
relou de le faire deux fois

).
Si on veut modifier ça, il va falloir enregistrer la saisie dans une variable, pour l'ajouter au zCode uniquement au tour de boucle suivant (une fois que le test de la boucle aura été fait)... Ce qui complique un peu l'affaire.
Version 1 améliorée
Voici le même code, après avoir modifié les problèmes soulignés ci-dessus.
Code : JavaScript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | var zCode = '';
var saisie = '';
// variable "temporaire", pour le 2e point
var texte = '<liste>\n';
do
{
// on ajoute le texte saisi au tour precedent
zCode += texte;
// on demande du texte et on enregistre dans la variable "temporaire"
saisie = prompt("Contenu de la puce ?");
texte = "<puce>" + saisie + "</puce>\n";
}while(saisie);
// le 1er "detail"
if(zCode == '<liste>\n')
zCode = '';
else
zCode += "</liste>";
alert(zCode);
|
Version 2 : tout-en-un
Une autre solution consisterait à
enregistrer et à
tester en même temps le texte saisi.
Comment ? Eh bien en plaçant l'affectation
dans la condition.
En voici le principe :
Code : JavaScript1
2
3 | var saisie;
while(saisie = prompt("Texte"))
// instructions
|
ce qui équivaut, je vous le rappelle, à ceci :
Code : JavaScript1
2
3 | var saisie;
while( (saisie=prompt("Texte")) == true )
// instructions
|
Ne confondez pas le = (opérateur d'affectation) avec == (opérateur de comparaison) !
Il faut bien comprendre que cette condition (appelée à chaque tour de boucle) se compose de
deux étapes :
- tout d'abord, l'instruction saisie = prompt("Texte"), que vous comprenez maintenant sans difficulté.
- Ensuite, le test, avec la nouvelle valeur de la variable modifiée ci-dessus.
Bref, pour revenir à notre exemple, ça nous donne ceci :
Code : JavaScript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | // initialisation
var zCode = "<liste>\n";
var saisie;
// boucle
while(saisie = prompt("Contenu de la puce ?"))
zCode += "<puce>" + saisie + "</puce>\n";
// finitions
if(zCode == '<liste>\n')
zCode = '';
else
zCode += "</liste>";
alert(zCode);
|
Pas mal, vous ne trouvez pas ?