modules et variables globales dans le module

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

modules et variables globales dans le module

Message par case »

bonjour, j'ai un problème je m’intéresse aux modules pour la première fois mais je me heurte a un problème.
le code ci dessous ne marche pas. pourtant il est indique dans la doc que le module est un programme indépendant
j'ai regarde d'autre modules comme ceux de Thorsten Hoeppner et celui ci met bien des global dans son module
j'ai loupé quoi?

Code : Tout sélectionner

; test de moduke

DeclareModule test
  Declare proc()
EndDeclareModule

UseModule test
proc() ; appel de la procédure dans le module test.


Module test
    Global a$="test"
    Structure essai
    st.s
    a.i
  EndStructure  

  Procedure proc()
    b.essai\st="essai "     
    b\a=150
    Debug "["+a$+"] la variable globale a l'interieure du module n'est pas initialisée" 
    Debug b\st +" Debug b\st la Structure est bien initialisée "
    debug b\a
  EndProcedure
EndModule

Dernière modification par case le mer. 21/sept./2022 23:05, modifié 1 fois.
ImageImage
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: modules et variables glabales dans le module

Message par case »

Ok, donc les modules doivent se trouver avant le code les utilisant je voyais cela comme un container (une sorte de procédure) indépendant du reste du programme mais le contenu du module est tout de même exécuté par le programme .

Code : Tout sélectionner

DeclareModule test
EndDeclareModule

Module test
   
  Debug "je suis lu par le programme meme si je suis dans un module"  
  
EndModule
ImageImage
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: modules et variables glabales dans le module

Message par Ollivier »

Salut case,

c'est un double container : il y a un container pour déclarer, et un container pour le reste.

Ce qui me bloque cash avec la notion de module qui a déjà 9 ans, c'est que tu te retrouves avec des exécutions où il ne se passe rien alors que tu attends, au pire une erreur, ou, au mieux un message d'avertissement. Je fais le homard avec les modules : de temps en temps, je me dis que Fred n'a pas rajouté ça pour rien. Alors, je prends la doc, je crée un module simple, puis un deuxième, et là je stoppe direct, et je bazarde les modules hors de ma vue.

Je veux bien qu'on démarre ensemble un session homard. Mais tu vas voir, tu vas faire marche arrière plus vite que moi !

Mon avis, c'est que dès que tu as un soupçon de doute, un zeste de préssentiment, une esquisse d'hésitation, il faut que tu fasses ta mijorée : viens en parler ici. Dis-moi quel cauchemar tu as fait, et je t'aiderais y remédier définitivement.

Je te dirais alors << Voici comment, techniquement, remédier définitivement, à ce que tu apréhendes autour des modules... >>

Et tu me répondras << Voici comment, techniquement, remédier définitivement au modules ! >>

Je sortirais alors une baguette magique, et toi, tu seras libre ou non d'apprécier la technique. En attendant, je n'ai pas besoin de sortir la baguette magique pour moi-même, puisque le module est fait pour partager des morceaux de code dans un projet en cours d'évolution.

En tout cas, le dernier coup de marche arrière de homard que j'ai donné c'est quand deux macros différentes mais portant le même nom était chacune dans un module distinct, et que le programme ne mettait pas d'erreur, rien, que dalle... F5 ? F5 ! Encore F5 ? Programme démarré, et programme terminé affiché immédiatement. Pas d'erreur, pas d'avertissement.

Le coup de homard d'avant c'était l'absence de hiérarchie, la façon dont les codes source peuvent être partagés entre eux. Il y a un truc qui m'a bloqué, et, comme il n'y a pas d'avertissement durant même la compilation tu ne peux pas expérimenter, du moins, il faut vraiment avoir du temps à perdre pour avancer dans un truc qui ne se constate que dans des projets long terme à plusieurs, alors qu'il y a tant à apprendre de nouveautés informatiques dès qu'on approche le compilateur.

Donc, ma baguette magique (parce que j'aime bien déconner, mais brièvement), ce serait, pourquoi pas de créer un outil de compilation qui s'exécute entre l'IDE et le compilateur. Ça capitaliserait chaque remède anti-merdier. Voilà, l'idée m'est venue en te lisant te décrire comme un bleu. Peut-être que ce sujet est la bonne opportunité pour ça, étant moi-même un bleu !
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: modules et variables glabales dans le module

Message par case »

un si long poste qui parle de crustacés ça fait plaisir :)
bref, j'ai un peu avancé sur le sujet, je suis un bleu effectivement, un bleu ancien , un bleu bien fait qui traîne par la depuis longtemps.

on est tous des bleu quelque part. c'est pour ça que je poste ici ^^.

du coup j'ai procédé comme ça. pour mettre mes modules en fin de code comme mes procédures car j'aime pas devoir scroller encore et encore pour arriver a ma boucle principale ^^

pour les macros je verrai ça une autre fois car ça reste très obscure pour moi ^^

Code : Tout sélectionner

; test de module

DeclareModule test
  Declare test_proc()
  Declare test_init()
EndDeclareModule

UseModule test : test_init()
Global a$="variable exterieure au module"





test_proc() ; appel de la procédure dans le module test.
Debug a$
Module test
  Procedure test_init() ; fouretout pour les structures/variable est.. 
    Global a$="variable globale a l'interieur du module"
    Structure essai
      st.s
      a.i
    EndStructure  
  EndProcedure
  Procedure test_proc()
    b.essai\st="essai "     
    b\a=150
    Debug "["+a$+"] la variable globale a l'interieure du moduleest pas initialisée" 
    Debug b\st +" Debug b\st la Structure est bien initialisée "
    Debug b\a
  EndProcedure
EndModule




ImageImage
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: modules et variables glabales dans le module

Message par Ollivier »

Donne tes questions parce que je ne peux pas deviner. Et je ne peux pas rester copier/coller les codes source : il vous faut cinq secondes. Moi, c'est un quart d'heure.

Je veux bien faire des tests sur tes A$ : commenter le 1er qui est hors module et qui vire le 2ème, voir ce que ça donne. Et puis le décommenter (le 1er a$) et déplacer le second a$ dans la zone DeclareModule, et voir aussi ce que ça donne.

En tout cas, bien vu : il faut un minimum de planification, ou bien de règles à respecter, et avertir. Ce serait un bon départ d'outil de pré-process : avertir si une variable va être ignorée ou pas.


Petit info pour ton main() que tu ne veux pas mettre à la fin : il te suffit de rajouter un commentaire ;- principe et tu n'auras plus besoin de scroller dans tous les sens.

Je trouve que ce qui manque cruellement c'est le module dans lequel est le curseur de l'IDE : ce module "en cours de visite" devrait systématiquement être ajouté en fin de titre de la fenêtre de l'IDE.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: modules et variables glabales dans le module

Message par case »

Petit info pour ton main() que tu ne veux pas mettre à la fin : il te suffit de rajouter un commentaire ;- principe et tu n'auras plus besoin de scroller dans tous les sens.
oui j'y pense pas ^^

merci . j'ai laisse tomber l'idée de module je retourne a mes procédures ^^
au final les modules apportent pas énormément .

merci a toi en tout cas ^^
ImageImage
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: modules et variables globales dans le module

Message par Ollivier »

Ah là ça faisait trés longtemps que je n'avais pas pleuré de rire comme je viens de le faire au beau milieu de la nuit en te lisant...

Homard m'a tuer de rire...

C'était le bilto... Avec homard Sharrière. :mrgreen:
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: modules et variables globales dans le module

Message par case »

:mrgreen:
ImageImage
Répondre