PureBasic

Forums PureBasic
Nous sommes le Mer 18/Sep/2019 14:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 
Auteur Message
 Sujet du message: [Utilitaire] Getters & Setters
MessagePosté: Dim 19/Aoû/2018 23:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1655
Localisation: Belgique
Bonjour à tous,

Personnellement avec un module et une structure je préfère encapsulé mes données et passé par des getters et des setters plutôt que de donner accès directement à la structure.

L'avantage est que si les données sont lue ou écrite à divers endroit du programme et que l'on doivent modifié les données lues ou reçues (exemple éviter une division par zéro) ou ne devra agir que sur le getter ou setter concerné sans rien modifié d'autre.

Cette tache peut être fastidieuse, j'ai donc à l'aide de l'excellent tutoriel de falsam conçu un petit utilitaire pour faire cette tache qui copie le code dans le presse papier.

Image

Je préfère vous poster le code car de cette manière vous pourrez le modifié à votre sauce.

Remarque : Windows only car l'api SendMessage_ est utilisée

Code:
#Font = 0
#MAIN_FORM = 0
Enumeration
  #withName
  #LST
  #BT_VALIDE
  #BT_CANCEL
EndEnumeration
Structure item
  name.s
  type.s
EndStructure
Global NewList myItem.item(),withName.s
Procedure Exit()
  End
EndProcedure

Procedure Parse()
  Protected selected.s = RemoveString(GetClipboardText(),Chr(13))
 
  ; count number of lines
  Protected nl = CountString(selected,Chr(10))
  Protected i,lng.s
  For i = 1 To nl + 1
    lng = StringField(selected,i,Chr(10))
    AddElement(myItem())
    With myItem()
      \name = Trim(StringField(lng,1,"."))
      \type = LCase(Trim(StringField(lng,2,".")))
    EndWith
  Next
EndProcedure

Procedure valide()
  Protected code.s
  withName = GetGadgetText(#withName)
  If Not Len(withName)
    MessageRequester("Getters & Setters","Please set name of with",#PB_MessageRequester_Info)
    ProcedureReturn
  EndIf
  With myItem()
    ForEach myItem()
      code + "Procedure."+\type+" get_"+\name+"()"+Chr(10)
      code +"  ProcedureReturn "
      If Len(withName)
        code + withName+"\"
      EndIf
      code + \name +Chr(10)
      code + "EndProcedure"+Chr(10)+Chr(10)
      code + "Procedure set_"+\name+"("+\name+"."+\type+")"+Chr(10)
      If Len(withName)
        code + withName+"\"
      EndIf   
      code +" " + \name+" = "+\name + Chr(10)
      code + "EndProcedure"+Chr(10)+Chr(10)
    Next
    SetClipboardText(code)
    MessageRequester("Getters & Setters","Your code has ban copied into the clipboard",#PB_MessageRequester_Info)
    Exit()
  EndWith
EndProcedure

Procedure fillLst()
  ClearGadgetItems(#LST)
  ForEach myItem()
    AddGadgetItem(#LST,-1,myItem()\name)
  Next
EndProcedure

Procedure Run()
  ;Load scintilla component
  Protected HandleIDESci=Val(GetEnvironmentVariable("PB_TOOL_Scintilla")) 
  Protected y = 10
  If HandleIDESci
    ;copy to memory the user selected
    SendMessage_(HandleIDESci, #WM_COPY,0,0)   
  Else
    MessageRequester("Warning", "Please run this software only from Purebasic ide",#PB_MessageRequester_Warning)
    Exit()
  EndIf
  ; Make window
  LoadFont(#Font, "", 10)
 
  SetGadgetFont(#PB_Default, FontID(#Font))
 
  OpenWindow(#MAIN_FORM, 0, 0, 200, 320, "Gadget Editor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Tool)
  StickyWindow(#MAIN_FORM, #True)
 
  TextGadget(#PB_Any,10,y,180,30,"Name of with")
  y + 40
  StringGadget(#withName,10,y,180,30,"")
  y + 40
  ListViewGadget(#LST,10,y,180,180)
  y + 190
  ButtonGadget(#BT_CANCEL,10,y,70,30,"Cancel")
  ButtonGadget(#BT_VALIDE,120,y,70,30,"Ok")
  Parse()
  fillLst()
  SetActiveGadget(#withName)
 
  BindEvent(#PB_Event_CloseWindow,@Exit(),#MAIN_FORM)
  BindGadgetEvent(#BT_CANCEL,@Exit())
  BindGadgetEvent(#BT_VALIDE,@valide())
 
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

Run()


copié coller du tuto de falsam :mrgreen:

■ Installation.
- Compiler le code ci-dessus
- Allez dans le menu Outils de votre IDE et sélectionner l'item Outils Personnalisés
- Cliquez sur le bouton Nouveau
- Sélectionner l’exécutable de votre utilitaire (GadgetEditor.exe) dans le champ de saisie Ligne de commande.
- Cocher la case Attendre la fin du programme.
- Donner un nom à votre application dans le champ Nom.
- Cliquer sur le champ Raccourci puis presser simultanément la combinaison de touches Ctrl + Entree
- Pour finir cliquer sur Ok

_________________
Windows 10 64 bits PB: 5.70 ; 5.71 beta 2


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: [Utilitaire] Getters & Setters
MessagePosté: Lun 20/Aoû/2018 8:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6650
Localisation: Isere
POOMan a écrit:
Personnellement avec un module et une structure je préfère encapsulé mes données et passé par des getters et des setters
Et ça donne un POOtit peu plus de gout au code :wink: :lol:
En tout cas merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye