Page 1 sur 1
Plus de précision sur les Modules
Publié : dim. 29/sept./2013 14:00
par Ar-S
Malgré l'exemple de la doc, je n'arrive pas à piger le but des modules. J'ai l'impression que ça ressemble aux structures (et encore) mais ça reste vague.
Si une bonne âme voulait bien montrer un exemple probant et simple et une explication je serai bien content.
En suivant l'exemple j'ai fait ceci. Je ne vois pas l’intérêt du module face à la structure, donc je me dis que son but est ailleurs, tout comme son point fort.
D'avance merci
Code : Tout sélectionner
; //// Modules //////////////////////
DeclareModule Clients
Global ID = 0
Global Total = 0
Global Nom.s = ""
EndDeclareModule
Module Clients
EndModule
DeclareModule Dupont
EndDeclareModule
Module Dupont
UseModule Clients
ID+1
Total+1
Nom = "Dupont"
EndModule
Debug "// Modules //"
Debug Clients::Nom
DeclareModule Durand
EndDeclareModule
Module Durand
UseModule Clients
ID+1
Total+1
Nom = "Durand"
EndModule
Debug Clients::Nom
Debug ""
; //// Structure //////////////////////
Structure Clients
ID.i
Total.i
Nom.s
EndStructure
Dim Clients.Clients(1)
Nom.s = "Dugland"
For i = 0 To 1
Clients(i)\ID + i
Clients(i)\Total + 1
Clients(i)\Nom = Nom.s
Nom.s = "Dubras"
Next
Debug "// Structures //"
For i = 0 To 1
Debug Clients(i)\Nom
Next
Re: Plus de précision sur les Modules
Publié : dim. 29/sept./2013 14:15
par Backup
je ne me suis pas encore interressé aux modules (sauf a l'instant ce qui concerne la syntaxe dans EPB... une vraie galere le mot "runtime" qui peut venir s'ajouter a Procedure , me mettait le cirque, pour la tabulation du code .... )
a part ça , ce que je crois en comprendre c'est :
qu'un module est une section de code , (une ou plusieurs procedure(s) par exemple )
qui peut etre appelé dans d'autre projet .... une sorte de librairie ....
donc on doit pouvoir se faire une collection de module , qu'on appel dans les codes ...
cependant, je vais etudier la chose apres avoir joué a WOT pour me detendre de mon dernier boulot sur EPB (pas encore en ligne)

Re: Plus de précision sur les Modules
Publié : dim. 29/sept./2013 14:23
par comtois
Avant les modules on pouvait créer des fichiers 'pbi' qui contenaient des fonctions réutilisables pour différents codes. L'inconvénient avec ces fichiers c'est que les variables, les procédures, etc ne sont pas protégées, il peut y avoir des conflits de nom de variables ou procédures ou constantes entre les différents fichiers.
Comme dit ce matin dans un autre post, je vois les modules comme un moyen de créer des bibliothèques facilement réutilisables.
C'est aussi un moyen de travailler à plusieurs sur un projet en le découpant en modules. Chacun peut coder son module sans avoir à se soucier des noms de procédure et variables que les autres utiliseront.
J'ai commencé ce module
vector3.pbi
Code : Tout sélectionner
DeclareModule Vector3
Structure Vector3
x.f
y.f
z.f
EndStructure
Declare Add(*R.Vector3, *V1.Vector3, *V2.Vector3)
Declare Sub(*R.Vector3, *V1.Vector3, *V2.Vector3)
Declare Mul(*R.Vector3, *V1.Vector3, *V2.Vector3)
Declare Div(*R.Vector3, *V1.Vector3, *V2.Vector3)
Declare Normalize(*V.Vector3)
Declare.f DotProduct(*V1.Vector3, *V2.Vector3)
Declare directionEquals(*V1.Vector3, *rhs.Vector3, tolerance.f)
EndDeclareModule
Module Vector3
Procedure Add(*R.Vector3, *V1.Vector3, *V2.Vector3)
*R\x = *V1\x + *V2\x
*R\y = *V1\y + *V2\y
*R\z = *V1\z + *V2\z
EndProcedure
Procedure Sub(*R.Vector3, *V1.Vector3, *V2.Vector3)
*R\x = *V1\x - *V2\x
*R\y = *V1\y - *V2\y
*R\z = *V1\z - *V2\z
EndProcedure
Procedure Mul(*R.Vector3, *V1.Vector3, *V2.Vector3)
*R\x = *V1\x * *V2\x
*R\y = *V1\y * *V2\y
*R\z = *V1\z * *V2\z
EndProcedure
Procedure Div(*R.Vector3, *V1.Vector3, *V2.Vector3)
*R\x = *V1\x / *V2\x
*R\y = *V1\y / *V2\y
*R\z = *V1\z / *V2\z
EndProcedure
Procedure.f DotProduct(*V1.Vector3, *V2.Vector3)
ProcedureReturn *V1\x * *V2\x + *V1\y * *V2\y + *V1\z * *V2\z
EndProcedure
Procedure Normalize(*V.Vector3)
Protected.f magSq, oneOverMag
magSq = *V\x * *V\x + *V\y * *V\y + *V\z * *V\z
If magsq > 0
oneOverMag = 1.0 / Sqr(magSq)
*V\x * oneOverMag
*V\y * oneOverMag
*V\z * oneOverMag
EndIf
EndProcedure
Procedure Length(*V.Vector3)
ProcedureReturn Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z)
EndProcedure
; Returns whether this vector is within a directional tolerance of another vector.
; @param rhs The vector To compare With
; @param tolerance The maximum angle by which the vectors may vary And still be considered equal
; @note Both vectors should be normalised.
Procedure directionEquals(*V1.Vector3, *rhs.Vector3, tolerance.f)
Protected.f dot, angle
dot = Vector3::DotProduct(*V1, *rhs)
angle = Degree(ACos(dot))
ProcedureReturn Bool(Abs(angle) <= tolerance)
EndProcedure
EndModule
pour l'utiliser
Code : Tout sélectionner
XIncludeFile 'vector3.pbi"
Define.Vector3::Vector3 R, V1, V2
V1\x = 0
V1\y = 1
V1\z = 0
V2\x = 0.01
V2\y = 0.99
V2\z = 0
Vector3::Normalize(@V2)
Vector3::Add(@R, @V1, @V2)
Debug R\x
Re: Plus de précision sur les Modules
Publié : dim. 29/sept./2013 14:55
par Ar-S
Je pense avoir compris.
Ai-je bon ?
Code : Tout sélectionner
; ================ INCLUDE ===============
; //// Modules //////////////////////
DeclareModule ArS
Declare message(message.s)
EndDeclareModule
Module ArS
Procedure Message(message.s)
MessageRequester("Je viens du module",message.s,#PB_MessageRequester_Ok)
EndProcedure
EndModule
; ================== PROG ===============
Procedure Message(nom.s)
MessageRequester("je viens du programme",nom.s)
EndProcedure
message("Ai-je pigé ?")
; "Le procédure 'message()' ci-dessus n'entre pas en conflit avec celle du module importé"
Ars::message("Je le pense")
Je pige l’intérêt de pouvoir utiliser plein de modules externes sans se soucier des conflits de noms contrairement à de la Lib.
En revanche, un fichier "aide" deviendra vite nécessaire pour les packs de modules conséquents.
Re: Plus de précision sur les Modules
Publié : dim. 29/sept./2013 16:07
par Torp
Salut,
il y a un tuto sur le site du zero (maintenant OpenClassroom) qui explique super bien les Espaces de noms et la problématique des conflits de noms de variables dans les librairies:
http://fr.openclassrooms.com/informatiq ... namespaces

Re: Plus de précision sur les Modules
Publié : dim. 29/sept./2013 20:04
par nico
Re: Plus de précision sur les Modules
Publié : jeu. 21/août/2014 12:22
par microdevweb
Perso j'utilise beaucoup les modules, car une fois développer plus besoins de se soucier de son contenu, on l'utilise simplement sans risque de conflit avec les autres variables. Vraiment pratique pour réutiliser du code
Re: Plus de précision sur les Modules
Publié : jeu. 21/août/2014 13:17
par graph100
Tiens, une pelle :
j'ai devancé Dobro

Re: Plus de précision sur les Modules
Publié : jeu. 21/août/2014 14:31
par majikeyric
graph100 a écrit :j'ai devancé Dobro

Il a communiqué sur son site et explique qu'il arrête PB (et EPB!) (pour ceux qui ne le savent pas).
Re: Plus de précision sur les Modules
Publié : jeu. 21/août/2014 14:44
par graph100
mmh, ça ne change rien à mon post