les petites procedures ...

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

les petites procedures ...

Message par jerexgrz »

Il serait bien de faire 2 styles de procedures <> :
1 qui renvoient des infos et 1 qui ne renvoie rien (comme sub en vb)

par ex: si dans la procedure je rentre ca:

procedure dep(x.l , y.l, z.l, vie.l, couleur.l, ....)
...
endprocedure

J'aimerais renvoier tous les resultats : c'est à dire x, y , z, vie, coul ...
Car generalement, ils sont quasi tous à modifier.

'Procedurereturn' n'est pas super car, dejà il faut utiliser cette fonction alors qu'avec la methode que j'utilise en vb, elle le fait en direct ! Mais surtout pour retourner plusieurs varaibles il faut faire:
procedurereturn x }
procedurereturn y } Beurk ! C'est dégeu ca !!
procedurereturn z }
...
au lieu de faire ca : procedurereturn x,y,z,vie, .... :idea:

et la derniere fonction comme Sub (x,y,z,...) ne renvoie rien. Elle permet d'afficher du texte par exemple. Et si vraiment, il est necessaire de renvoyer une valeur alors à ce moment on utilise procedurereturn.

Dans la colonne de droite, quand on double clique sur la procedure, elle va etre ouverte et quand on re-double clique dessus, elle se referme comme avec la methode du + et - dans la barre des nbs de lignes.

Voila, ce ne sont que des suggestions. A mediter donc !
:P
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

dans ton code, seul le procedurereturn x sera effectif...
tourne toi plutôt vers les structures... ou alors les pointeurs (ou les deux ;))

Dri
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Ce n'est peut-être pas le meilleur endroit pour donner un exemple, enfin ...

L'exemple montre comment utiliser les pointeurs structurés avec des procédures afin d'écrire plusieurs valeurs simultanément.

A+
Guimauve

Code : Tout sélectionner

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Exemple Procédure pointeur Structure
; Fichier : Source principal
; Version 0.0.0
; Programmation = Expérimental
; Programmé par : Guimauve
; Date : 8 août 2005
; Mise à jour : 8 août 2005
; Codé avec PureBasic V3.94
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure >>>>>

Structure Allo
  
  x.l
  y.l
  z.l
  vie.l
  couleur.l
  
EndStructure

; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs >>>>>

Procedure SetAllox(*ObjetA.Allo, x.l)
  
  *ObjetA\x = x
  
EndProcedure

Procedure SetAlloy(*ObjetA.Allo, y.l)
  
  *ObjetA\y = y
  
EndProcedure

Procedure SetAlloz(*ObjetA.Allo, z.l)
  
  *ObjetA\z = z
  
EndProcedure

Procedure SetAllovie(*ObjetA.Allo, vie.l)
  
  *ObjetA\vie = vie
  
EndProcedure

Procedure SetAllocouleur(*ObjetA.Allo, couleur.l)
  
  *ObjetA\couleur = couleur
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs >>>>>

Procedure.l GetAllox(*ObjetA.Allo)
  
  ProcedureReturn *ObjetA\x
  
EndProcedure

Procedure.l GetAlloy(*ObjetA.Allo)
  
  ProcedureReturn *ObjetA\y
  
EndProcedure

Procedure.l GetAlloz(*ObjetA.Allo)
  
  ProcedureReturn *ObjetA\z
  
EndProcedure

Procedure.l GetAllovie(*ObjetA.Allo)
  
  ProcedureReturn *ObjetA\vie
  
EndProcedure

Procedure.l GetAllocouleur(*ObjetA.Allo)
  
  ProcedureReturn *ObjetA\couleur
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Update >>>>>

Procedure UpdateAllo(*ObjetA.Allo, x.l, y.l, z.l, vie.l, couleur.l)
  
  SetAllox(*ObjetA, x)
  SetAlloy(*ObjetA, y)
  SetAlloz(*ObjetA, z)
  SetAllovie(*ObjetA, vie)
  SetAllocouleur(*ObjetA, couleur)
  
EndProcedure

; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< L'opérateur Equal >>>>>

Procedure EqualAllo(*ObjetA.Allo, *ObjetB.Allo)
  
  SetAllox(*ObjetA, GetAllox(*ObjetB))
  SetAlloy(*ObjetA, GetAlloy(*ObjetB))
  SetAlloz(*ObjetA, GetAlloz(*ObjetB))
  SetAllovie(*ObjetA, GetAllovie(*ObjetB))
  SetAllocouleur(*ObjetA, GetAllocouleur(*ObjetB))
  
EndProcedure


; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Début de l'exemple

; On créer 2 variables dans laquelle les procédures 
; vont écrire les valeurs.

A_Variable.Allo 
B_Variable.Allo

Debug "On met en place de valeurs dans : A_Variable.Allo"
Debug ""

UpdateAllo(A_Variable, 10, 25, 32, 100, RGB(255,0,255))

Debug "On affiche le contenue de : A_Variable.Allo"
Debug "Le x : " + Str(GetAllox(A_Variable))
Debug "Le y : " + Str(GetAlloy(A_Variable))
Debug "Le z : " + Str(GetAlloz(A_Variable))
Debug "La vie : " + Str(GetAllovie(A_Variable))
Debug "La couleur : " + Str(GetAllocouleur(A_Variable))

Debug ""
Debug "On affiche le contenue de : B_Variable.Allo"
Debug "Le x : " + Str(GetAllox(B_Variable))
Debug "Le y : " + Str(GetAlloy(B_Variable))
Debug "Le z : " + Str(GetAlloz(B_Variable))
Debug "La vie : " + Str(GetAllovie(B_Variable))
Debug "La couleur : " + Str(GetAllocouleur(B_Variable))

Debug ""
Debug "Avec l'opérateur Equal, B_Variable devient identique à A_Variable"
EqualAllo(B_Variable, A_Variable)

Debug ""
Debug "On affiche le contenue de : B_Variable.Allo"
Debug "Le x : " + Str(GetAllox(B_Variable))
Debug "Le y : " + Str(GetAlloy(B_Variable))
Debug "Le z : " + Str(GetAlloz(B_Variable))
Debug "La vie : " + Str(GetAllovie(B_Variable))
Debug "La couleur : " + Str(GetAllocouleur(B_Variable))

jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Message par jerexgrz »

Concernant la rep de dry :

Les <> retour de procedures (x,y,z, ...) fonctionnent, j'ecris leurs valeurs dans un meme fichier !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah fais moi un code ou trois procedurereturn se suivent et qui fonctionne (cad que la fonction renvoi bien les 3 valeurs)

je suis assez curieux de voir ca et si ca fonctionne bah j'aurais appris un truc en PB...
Quant à écrire dans un fichier et retourner une valeur y'a quand même une grande différence nan ?

Dri
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Il y a un autre moyen mais elle nécéssite le même nombre d'appel qu'il y a de retour à faire.

Code : Tout sélectionner

Enumeration
  
  #Var01
  #Var02
  #Var03
  #Var04
  
EndEnumeration

Procedure.f RetourMultiple(Var01.f, Var02.f, Var03.f, Var04.f, VariableRetour.b)
  
  Select VariableRetour
    
    Case #Var01
      Resultat.f = Var01 + Var02 + Var03 + Var04
      
    Case #Var02
      Resultat.f = (Var01 + Var02) * (Var03 + Var04)
      
    Case #Var03
      Resultat.f = (Var01 + Var02) / (Var03 + Var04)
      
    Case #Var04
      Resultat.f = Var01 - Var02 - Var03 - Var04

  EndSelect
  
  ProcedureReturn Resultat
EndProcedure 


Debug RetourMultiple(125.125, 25.564, 0.7172, 3.141592, #Var01)
Debug RetourMultiple(125.125, 25.564, 0.7172, 3.141592, #Var02)
Debug RetourMultiple(125.125, 25.564, 0.7172, 3.141592, #Var03)
Debug RetourMultiple(125.125, 25.564, 0.7172, 3.141592, #Var04)
Personellement, je préfaire untiliser une structure avec un pointeur plutôt que faire comme ceci.

A+
Guimauve
Répondre