Plus de précision sur les Modules

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Plus de précision sur les Modules

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

Re: Plus de précision sur les Modules

Message 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)

:)
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Plus de précision sur les Modules

Message 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 
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Plus de précision sur les Modules

Message 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.
~~~~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
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Re: Plus de précision sur les Modules

Message 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

:wink:
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Plus de précision sur les Modules

Message par nico »

Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Plus de précision sur les Modules

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Plus de précision sur les Modules

Message par graph100 »

Tiens, une pelle :

Image

j'ai devancé Dobro :lol:
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
majikeyric
Messages : 602
Inscription : dim. 08/déc./2013 23:19
Contact :

Re: Plus de précision sur les Modules

Message par majikeyric »

graph100 a écrit :j'ai devancé Dobro :lol:
Il a communiqué sur son site et explique qu'il arrête PB (et EPB!) (pour ceux qui ne le savent pas).
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Plus de précision sur les Modules

Message par graph100 »

mmh, ça ne change rien à mon post
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre