übersicht bei größerem project behalten?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

übersicht bei größerem project behalten?

Beitrag von inti »

hi@all,
bin nun bei purebasic seit fast 2jahren und haben nach vielen kleineren spielereien (meistens nur für mich) mal was größeres angefangen (spiel mit PB400) und stehe nun vor dem problem der verwaltung - folgenes problem:

ich arbeite mit vielen strukturen und proceduren die ich aufgrund der geschwindigkeiten nicht zusammenlegen kann weshalb sich nun am kopf meines projektes mehr als 30 einzelne proceduren tummeln! :( da einige proceduren auch wieder auf anderen zugreifen kann ich das ganze auch schlecht nach thema oder zweck ordnen - dachte eigentlich das proceduren global sind aber wenn ich aus einer procedure eine andere aufrufe die darunter steht so bekomme ich einen fehler!?!? weiterhin lassen sich die proceduren zwar falten aber dann funktioniert die suchfunktion nicht richtig!?!?

mich würde ganz einfach mal die erfahrungen der PB-user mit größeren projekten interessieren denn viele sachen die ich hier im forum gefunden habe sind doch eher "überschaubar".
Benutzeravatar
tobe
Beiträge: 146
Registriert: 14.09.2006 17:33
Wohnort: Oktoberfest

Beitrag von tobe »

hi inti,

mit Declare kannst du dein proceduren sortierproblem lösen

Code: Alles auswählen

Declare b()
Procedure a()
  b()
EndProcedure
Procedure b()
  Debug 1
EndProcedure
a()
PureBasic 4.40 (Windows - x86)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Dazu kann man nur allgem. Tipps geben, je nach Projekttyp und Größe fällt
es immer etwas anders aus. Ich persönlich mag z.B. keine Declares, weil
ohne ist die Suchrichtung immer nach Oben :mrgreen:

Code: Alles auswählen

XIncludeFile "common.pbi"
; Enthält:
; Allgemeine Konstanten
; Allgemeine Structuren
; Prototypes
; Allgemeine Proceduren

XIncludeFile "intro.pbi"
; Enthält:
; Alles für das Intro, ohne obiges

; ....
; ....


Procedure Main()
  ; Ab hier alle Proceduren über dieser Schreiben, so sind die meisten Declares überflüssig
EndProcedure

Main() ; Programmstart
Globale Variablen vermeiden, richtig Kommentieren, und zwar das was
passiert, nicht wie der Code funktioniert.
Aussagekräftige Namen für Proceduren und Variablen usw.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> wenn ich aus einer procedure eine andere aufrufe die darunter steht so bekomme ich einen fehler!?!?

yup. deswegen solltest du sie nicht nach thema oder alphabetisch, sondern logisch ordnen:
je weiter "innen" eine proc ist, desto weiter oben steht sie.

> am kopf meines projektes mehr als 30 einzelne proceduren tummeln!

nu, das is doch nich sooo viel. ;)
wenns zu unübersichtlich wird, kannst du in includes auslagern,
aber viel wichtiger ist, fette kommentare zu benutzen.
jede Procedure kann einen Kopf von 3-x kommentarzeilen haben.
lange sternchenketten helfen sehr bei der auffindbarkeit.
z.b.

Code: Alles auswählen

;**************************************************************************
;****
;**** P R O C E D U R E S
;****
;**************************************************************************

;*************************************
;**** Set Single Ball on Random Value
;*************************************

Procedure CreateBall(x.l, y.l)
  Ballz(x,y)\Phase  = Random(255)
  Ballz(x,y)\Type   = 1
  Ballz(x,y)\Color  = Random(32)
EndProcedure

;*************************************
;**** Prepare Complete BallField
;*************************************

Procedure PrepareField()
  Define x.l
  Define y.l
  For x=0 To 16
    For y=0 To 13
      CreateBall(x,y)
    Next
  Next
EndProcedure
das ist noch äußerst knapp kommentiert,
vorzugsweise gehört in den procedurekopf noch ein text,
was für argumente sie erwartet,
was sie tut, und was sie zurückliefert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

Beitrag von inti »

also includen, kommentare usw ist schon klar aber obwohl ich schon versuche strukturiert und überlegt zu schreiben wird das ganze bei langen bzw größeren sachen schnell unübersichtlich. wenn sich die proceduren einfach sortieren ließen wäre das ganze halb so wild, stellt sich (mir) die frage: hat das einen tieferen grund dass proceduren keine anderen proceduren aufrufen können die erst danach im code stehen? :?

hmm, also wenn ich statt proceduren ohne parameter einfach GOSUB verwenden würde hätte ich ich das problem der sortierung nicht mehr aber das wäre ja dann wieder schlechter coding-style, oder? /:->
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Declare ist für dich der richtige weg. in dem beispiel hier geht es z.b. gar nicht anders, weil jede funktion die jeweils andere braucht. wenn du vor der definition deiner procs alle mit Declare deklarierst, kannst du sie anschließend ordnen wie du willst.

Code: Alles auswählen

Declare a( bool.l )
Declare b()


Procedure.l a( bool.l )
  If val
    ProcedureReturn b()
  Else
    ProcedureReturn 33
  EndIf
EndProcedure


Procedure.l b()
   ProcedureReturn a(#False)
EndProcedure



Debug a(#True)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

inti hat geschrieben:hat das einen tieferen grund dass proceduren keine anderen proceduren aufrufen können die erst danach im code stehen? :?
Du solltest Dir den

Code: Alles auswählen

Declare 
Befehl nochmal genauer ansehen.
Wurde in diesen Thread aber schon paarmal gesagt, also auch die Hilfe dazu lesen ;-)
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Ich Teile auch in verschiedene Include-dateien auf.
Global.pb, Strukturen.pb, Konstanten.pb, etc

Meistens erzeuge ich noch Log-Dateien wo Fehler und Infos ablege.

z.b.

Code: Alles auswählen

Global path_log.s

path_log = "MyProgramm.log"

Procedure WriteLog(text.s)

  temp.s = FormatDate("%yyyy.%mm.%dd %hh:%ii:%ss - ", Date())
  temp + text
  AddGadgetItem(#Listview_log, -1, temp)
  If OpenFile(0, path_log)
    FileSeek(Lof())
    WriteStringN(temp)
    CloseFile(0)
  EndIf
  
EndProcedure
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
mknjc
Beiträge: 217
Registriert: 09.09.2006 12:59

Beitrag von mknjc »

Ich machs genauso wie mk-soft.
Vieleicht noch ein wenig übertriebener.

/Programm.pb ;Incude der dateien im include verzeichnis.

/include/Programm.pbi ;Die bestandteile des progs die nicht als Procedure vorleigen
/include/Konstanten.pbi ;Includes der Konstanten Dateien
/include/Prozeduren.pbi ;Includes der Prozeduren Dateien
/include/Variablen.pbi ;Includes der Variablen Dateien

/include/Konstanten/...
/include/Prozeduren/...
/include/Variablen/...

Für die Declare anweisungen hab ich ein Prog geschrieben das die automatisch in eine Declare datei einfügt.

@Kaeru Gaman
Kommentierst du immer auf englisch???
Man kanns auch übertreiben mit dem Englischwahn.
So ne tolle Sprache is das auch nicht.


Mkg mknjc
Ich nutze PureBasic 4.02 unter Linux und Windows.

Momentane Projekte:
Das geheimste aller geheimen Projekte... FPBC
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

mknjc hat geschrieben: @Kaeru Gaman
Kommentierst du immer auf englisch???
Man kanns auch übertreiben mit dem Englischwahn.
So ne tolle Sprache is das auch nicht.
Das hat schon einen Sinn. Oft sitzen auch Leute aus anderen Laendern
an einem Projekt und fuer die wird es schwer sein deutsch zu lernen.
Wenn es nur fuer dich ist, ist es aber eher nebensaechlich welche
Sprache du nutzt.
Antworten