Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

execution apres une boucle for

6 réponses
Avatar
Mihamina (R12y) Rakotomandimby
Bonjour,
J'ai une boucle for, et juste apres la boucle, une alert() pour debugger.
Donc ceci (je simplifie, hein...):

var une_variable = <php? print mysql_num_rows($blabla); ?>;
for (i=0; i < une_variable; i ++)
{
[fais ceci et cela]
}
alert("c est fait ");

Dans mon code (tres compliqué), alert n'est pas appelée.

Par contre, si je place alert() dans la boucle, alors j'ai le bon nombre de
pop-up avec le bon affichage, car je demande a alert d'afficher l'indice de
la boucle (ce qui me fait dire qu'on n'a pas de problèmes d'indexes).
Quel cas de figure une boucle for empeche l'execution de l'instruction juste
aores la boucle?

J'essaie avec Konqueror et IE6 avec les memes constatations.
Ca peut aussi etre un problème de parsing de la page en question, car c'est
du code récupéré/hérité (un fichier de 2500 lignes).... Mais peut-etre que
non.
Dans du code simple, comme celui de l'exemple, "ça marche bien", mais une
fois dans ma page, ça marche moins bien.
Merci d'avance.

6 réponses

Avatar
Olivier Miakinen

Bonjour,
J'ai une boucle for, et juste apres la boucle, une alert() pour debugger.
Donc ceci (je simplifie, hein...):

var une_variable = <php? print mysql_num_rows($blabla); ?>;
for (i=0; i < une_variable; i ++)
{
[fais ceci et cela]
}
alert("c est fait ");

Dans mon code (tres compliqué), alert n'est pas appelée.

Par contre, si je place alert() dans la boucle, alors j'ai le bon nombre de
pop-up avec le bon affichage, car je demande a alert d'afficher l'indice de
la boucle (ce qui me fait dire qu'on n'a pas de problèmes d'indexes).
Quel cas de figure une boucle for empeche l'execution de l'instruction juste
aores la boucle?


Le code ne planterait pas par hasard vers la fin du code de l'itération
« une_variable - 1 » ? Est-ce que cela marche toujours quand tu places
alert() juste avant l'accolade fermante ?

Tu peux même essayer ceci :

var une_variable = <php? print mysql_num_rows($blabla); ?>;
for (i=0; i < une_variable; i ++)
{
[fais ceci et cela]
if (i >= une_variable - 2) {
alert("dans la boucle");
}
}
alert("c est fait ");

Si tu as deux alertes "dans la boucle" et aucune "c est fait " alors je
sèche. En revanche, si tu as une seule alerte "dans la boucle" et rien
d'autre, c'est bien que le code plante à la dernière itération.

Avatar
Mihamina (R12y) Rakotomandimby
Olivier Miakinen - :
Quel cas de figure une boucle for empeche l'execution de
l'instruction juste aores la boucle?
Si tu as...



J'ai l'explication, c'est à cause de l'imbrication de mes boucles et du fait
que j'utilise le meme nom pour mes indices de boucles.
Un cas concret: http://www.daj.at/boucle.html

On voit que les "===" ne se font afficher qu'une fois et les "++" eux, vont
bien. La boucle contenant les "===" se fait donc directement interrompre et
ne va pas à son terme. C'est ce qui m'est arrivé.

En changeant de nom les indices, ça revient dans l'ordre.

Les choses se trouvant dans des functions distincts, il ne m'est pas venu à
l'esprit de penser un seul instant à une histoire de portée.

Quelle est l'explication technique? (Quels mot-clé SVP)
Connaitriez-vous d'autres subtilités du langage de ce type qui sont
sceptibles de me faire perdre 100gr de cheveux et que je pourrais
anticiper?

Merci d'avance.


Avatar
Olivier Miakinen

J'ai l'explication, c'est à cause de l'imbrication de mes boucles et du fait
que j'utilise le meme nom pour mes indices de boucles.
Un cas concret: http://www.daj.at/boucle.html

[...]

Quelle est l'explication technique? (Quels mot-clé SVP)


Portée des variables ?

Remplacer « for (i=...) » par « for (var i = ...) » et « for (j=...) »
par « for (var j = ...) » serait beaucoup plus propre et plus sûr.

Connaitriez-vous d'autres subtilités du langage de ce type qui sont
sceptibles de me faire perdre 100gr de cheveux et que je pourrais
anticiper?


En voici une : <http://www.google.fr/search?q=javascript+closures>

Avatar
Mihamina (R12y) Rakotomandimby
Olivier Miakinen - <4635250f$ :
Un cas concret: http://www.daj.at/boucle.html
Quelle est l'explication technique? (Quels mot-clé SVP)
Portée des variables ?



Quand j'ajoute un alert("toto") juste apres l'accolade de la boucle for de
boucle_deux(), pas de pop-up. Malgré les "var" (qui ont permi au moins le
parcours de la boucle).
Aussi un probleme de portée?
MErci encore.


Avatar
Mihamina (R12y) Rakotomandimby
Mihamina (R12y) Rakotomandimby - :

Un cas concret: http://www.daj.at/boucle.html
Quelle est l'explication technique? (Quels mot-clé SVP)
Portée des variables ?

Quand j'ajoute un alert("toto") juste apres l'accolade de la boucle for de

boucle_deux(), pas de pop-up. Malgré les "var" (qui ont permi au moins le
parcours de la boucle).


Exemple de code ou je n'ai pas de pop-up:
http://www.daj.at/boucle-var.html
Pourtant, d'apres l'output on a bien un parcours complet des indices.
Je ne comprends pas.



Avatar
Mihamina (R12y) Rakotomandimby
Mihamina (R12y) Rakotomandimby - :

Un cas concret: http://www.daj.at/boucle.html
Quelle est l'explication technique? (Quels mot-clé SVP)
Portée des variables ?

Quand j'ajoute un alert("toto") juste apres l'accolade de la boucle for

de boucle_deux(), pas de pop-up. Malgré les "var" (qui ont permi au moins
le parcours de la boucle).
Exemple de code ou je n'ai pas de pop-up:



Apres une nuit de sommeil: sous IE6, y a pop-up.
Sous Konqueror, non. Pour avoir la pop-up, je dois plutot mettre l'alert()
_dans_ la boucle... Ce qui, dans mon contexte final n'est pas génant, mais
c'est quand meme curieux.