EnableExplicit et les modules

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

EnableExplicit et les modules

Message par falsam »

Je viens de faire une séance de débogage sur une procédure d'un module qui ne retournait pas le bon résultat.

Dans ce module j'avais déclaré une variable CountItem.
Malheureusement plus loin dans ma procédure, j'ai mal orthographié CountItem qui est devenu CounItem.

Je code toujours avec EnableExplicit en début de code et je n'ai pas eu le message
Avec 'EnableExplicit', les variables doivent etre explicitement declarees: CounItem

Voici un exemple de code plus simple que mon module.
Dans cet exemple je déclare la variable Dummy. Dans la procédure Add(), Dummy devient Dumy.

Code : Tout sélectionner

EnableExplicit

DeclareModule Foo
  Declare Add(a,b)  
EndDeclareModule

Module Foo
  Global Dummy
  Procedure Add(a,b)
    
    ; L'intrus est ici
    Dumy = 3
    ProcedureReturn a+b + Dummy
  EndProcedure 
EndModule

UseModule Foo
Debug add(2,3)
Je pensais avoir comme résultat 8 et non pas 5.

:arrow: Est ce que c'est un bug ? La réponse est NON.
Un module est un espace de nom qui représente un moyen de séparer ses éléments au sein du code de telle sorte à éviter les conflits. Une variable dans un module ne se retrouvera pas en conflit avec une variable du code qui utilisera ce module.

La fonctionnalité EnableExplicit aurait du être placée à l'intérieur du module pour me prévenir des erreurs de frappes ou des variables non déclarées.

Code : Tout sélectionner

DeclareModule Foo
   EnableExplicit
..
..
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: EnableExplicit et les modules

Message par SPH »

Soit je suis bête, soit tu es fatigué 🤗

Cela ne marche pas (c'est normal) :

Code : Tout sélectionner

EnableExplicit

DeclareModule Foo
  Declare Add(a,b)  
EndDeclareModule

Module Foo
  Global Dummy
  Procedure Add(a,b)
    
    ; L'intrus est ici
    Dumy = 100
    ProcedureReturn a+b + Dummy
  EndProcedure 
EndModule

UseModule Foo
Debug add(1,2)
Cela marche (normal aussi) :

Code : Tout sélectionner

EnableExplicit

DeclareModule Foo
  Declare Add(a,b)  
EndDeclareModule

Module Foo
  Global Dummy
  Procedure Add(a,b)
    
    ; L'intrus est ici
    Dummy = 100
    ProcedureReturn a+b + Dummy
  EndProcedure 
EndModule

UseModule Foo
Debug add(1,2)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: EnableExplicit et les modules

Message par SPH »

Hmmmm, en te relisant, je pense que tu n'appuyais pas l"'erreur' que je soulève...
Peut etre voulais tu parler de 'Define'...

A toi de confirmer... 😶

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: EnableExplicit et les modules

Message par Ar-S »

SPH il rappel juste le fait que "Un module est un espace de nom qui représente un moyen de séparer ses éléments au sein du code de telle sorte à éviter les conflits. Une variable dans un module ne se retrouvera pas en conflit avec une variable du code qui utilisera ce module. "
Donc normal que même via l'enableexplicit il n'ait pas eu de message d'erreur.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: EnableExplicit et les modules

Message par Ollivier »

falsam a écrit :La fonctionnalité EnableExplicit aurait du être placée à l'intérieur du module pour me prévenir des erreurs de frappes ou des variables non déclarées.
S'il y a un tuto sur les modules, cette règle est bonne à prendre. Je vérifierai si c'est mon ignorance de cette règle qui m'a fait vomir sur les modules.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: EnableExplicit et les modules

Message par boddhi »

Si je peux me permettre,

Pour résumer, un EnableExplicit/DisableExplicit déclaré à l'extérieur d'un module n'a pas d'effet dans le-dit module (en somme, comme si la commande n'avait jamais été écrite) et réciproquement un EnableExplicit/DisableExplicit déclaré à l'intérieur d'un module n'a pas d'effet à l'extérieur de ce dernier.
Répondre