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 8O , 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