Page 1 sur 1

EnableExplicit et les modules

Publié : dim. 09/avr./2023 22:10
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
..
..

Re: EnableExplicit et les modules

Publié : lun. 10/avr./2023 2:39
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)

Re: EnableExplicit et les modules

Publié : lun. 10/avr./2023 2:45
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... 😶

Re: EnableExplicit et les modules

Publié : lun. 10/avr./2023 7:46
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.

Re: EnableExplicit et les modules

Publié : lun. 10/avr./2023 12:53
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.

Re: EnableExplicit et les modules

Publié : mar. 11/avr./2023 21:29
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.