[Utilitaire] Getters & Setters

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

[Utilitaire] Getters & Setters

Message par microdevweb »

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 : Tout sélectionner

#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.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: [Utilitaire] Getters & Setters

Message par Kwai chang caine »

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
Répondre