Page 1 sur 1
Un intrus dans Until !
Publié : mar. 18/janv./2005 23:44
par Dräc
Tenez : un constat marrant !
Dans le code qui suit, malgré le « = Quit = 1 », tout se passe normalement !
On peut meme changer le « = » par « > » ou « < »
Code : Tout sélectionner
If OpenWindow(0, 100, 200, 200, 200, #PB_Window_MinimizeGadget, "test")
Quit = 0
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit =1
EndIf
Until = Quit = 1
EndIf
Publié : mer. 19/janv./2005 5:05
par Guimauve
Oui c'est probablement parce que la vérification de la boucle est de type paresseuse. C'est un erreur sur les opérateurs booléens.
Mais ton bout de code plutôt tordu, je ne comprend pas pourquoi coder comme tu le fais.
A+
Guimauve
Publié : mer. 19/janv./2005 7:09
par Dräc
@Guimauve :
Je ne saisi pas le sens de « boucle paresseuse » ?!
Pour ce qui est du code, c’est un exemple pour mettre en exergue le problème.
Personnellement, je ne trouve aucun sens à écrire : « Until = Quit = 1 »
Publié : mer. 19/janv./2005 10:20
par Backup
je pense qu'il a eu la meme reaction que moi
pourquoi pas faire:
Code : Tout sélectionner
If OpenWindow(0, 100, 200, 200, 200, #PB_Window_MinimizeGadget, "test")
Repeat
EventID = WaitWindowEvent()
Until = EventID = #PB_Event_CloseWindow
EndIf
pour eviter l'emplois inutile de la variable " QUIT"
mais ça n'empeche rien au probleme souligné !!
c'est quand meme bizard cette tolerance ! (que j'ai laissé ici expres !):D
Publié : mer. 19/janv./2005 11:14
par nico
Je demanderais que cette expression soit retirée des exemples de Pure Basic; elle n'apporte que des problèmes. Car avec cette façon de faire, la réponse à un évènement sur un gadget n'est pas toujours prise en compte.
Until EventID = #PB_Event_CloseWindow
Je sais, c'est surprenant

, mais maintes fois constaté.
Alors qu'avec une variable, aucun problème.
Publié : jeu. 20/janv./2005 2:23
par Guimauve
Je ne saisi pas le sens de « boucle paresseuse » ?!»
Ce n'est pas la boucle qui est paresseuse mais bien la vérification de la boucle.
Dans certain language si on a deux conditions par exemple, bien souvent la 1re des 2 est testé, l'autre n'est pas prise en compte et le code passe très bien. Sans message d'erreur mais avec un bogue qui difficile à trouver.
C'est le cas dans les scripts MatLab.
A+
Guimauve