Un intrus dans Until !

Archive.
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Un intrus dans Until !

Message 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
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message 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 »
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message 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
Répondre