Module und "Globale" Strukturen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Module und "Globale" Strukturen

Beitrag von Nero »

Ich bin gerade am testen der Module der 5.20 Beta 5

Allerdings ist mir aufgefallen das ich keine Strukturen in den Modulen verwenden kann die ausserhalb das Modules selbst erstellt wurden. :?

Code: Alles auswählen

Structure Struct
  a.i
  b.i
EndStructure


DeclareModule Test

  Declare Test(abc.Struct)

EndDeclareModule


Module Test

  Procedure Test(abc.Struct)
    Debug Test\a
  EndProcedure
 
EndModule

UseModule Test

xyz.Struct
xyz\a = 123
xyz\b = 456

Test(xyz)

UnuseModule Test
Mache ich da was falsch?
Wen nicht kann mir jemand sagen warum das so ist?
Abkapselung hin und her aber es ist echt nervig wen ich meine Strukturen die ich öfters wieder brauche in jedem Modul neu angeben muß.
Ich mein es sind ja eigentlich nur angaben über Datentypen mehr nicht die sollte man wenigstens irgendwie global verfügbar machen können (meine meinung :lol: ).
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Module und "Globale" Strukturen

Beitrag von Andreas21 »

Strukturen die außerhalb des Moduls sind, sind in Modulen nicht bekannt.
Der Code im Modul ist abgekapselt.
Somit auch die Strukturen.

Muts also alle Strukturen die in den Modul gebraucht werden auch im Modul deklarieren.

Hat auch den vorteil das man wenn man Module weiter gibt, nicht auf namen von Strukturen achten muss.
Genauso wie bei Prozeduren oder Variablen namen.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Module und "Globale" Strukturen

Beitrag von Nero »

Andreas21 hat geschrieben:Strukturen die außerhalb des Moduls sind, sind in Modulen nicht bekannt.
Der Code im Modul ist abgekapselt.
Somit auch die Strukturen.

Muts also alle Strukturen die in den Modul gebraucht werden auch im Modul deklarieren.

Hat auch den vorteil das man wenn man Module weiter gibt, nicht auf namen von Strukturen achten muss.
Genauso wie bei Prozeduren oder Variablen namen.
Das ist ja richtig doch wäre es praktisch wen man "globale" Strukturen definieren könnte.
Der Grund dafür ist auch recht einfach, wen ich ein Projekt habe in dem Daten zwischen Modulen hin und her geschaufelt werden
dann müsste ich bei 10 Modulen auch 10 mal die Struktur neu definieren.
Das ist dann echt nervtötend wen man 100 Strukturen hat.

Allerdings wäre das noch nicht mal so schlimm da ich ja per Include einfach die Strukturdatei einbinden kann nur hier hat man wieder
das Problem das man auch einen Pfad angeben muss und damit der im ganzen Programm gleich ist gibt man diesen
am besten über eine zentrale Konstante an ..... /:->
Ach ja das geht ja nun auch nicht :lol:

Die Sache die mich halt etwas stört ist das man diese Zwei dinge die sich nach ihrer Definition eh nicht ändern lassen nicht global nutzen lassen.
Das ist von daher auch etwas merkwürdig da ich im ganzen Programm zugriff auch alle PB eigenen Konstanten habe egal ob Modul oder nicht,
aber auf eigene hab ich keinen. :?

Wie gesagt Abkapselung hin oder her aber ich finde es macht keinen sinn den Zugriff auf Datentypen und Konstanten zu verweigern.
Und das Argument das man so einfach das Modul weitergeben kann und verwenden ohne sich Gedanken über Kollisionen machen zu müssen
ist eher schwach.
Mal ehrlich, wen ich ein großes Projekt betreibe dann gibt es auch Kommunikation zwischen den Teammitgliedern oder Teammeetings bei
denen man sich abspricht und kann Kollisionen vermeiden.
Oder wen man ein PlugIn für eine Software schreibt so ist diese eigentlich immer gut genug Dokumentiert um so was zu vermeiden.

Ich sage ja nicht das man es generell zulassen sollte sondern eher so das man sie als Global definieren kann eventuell so in der Art.

Code: Alles auswählen

Globalisation

Enumeration
#Test_1
#Test_2
EndEnumeration

Structure Test
 a.i
 b.i
EndStructure

EndGlobalisation
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Module und "Globale" Strukturen

Beitrag von c4s »

Du kannst dir ein spezielles Modul anlegen, in dem alle "globalen" Strukturen etc. definiert werden. Dieses Haupt-Modul kannst du dann mit UseModule innerhalb deiner Unter-Modulen verwenden.
Eine sehr ausführliche und aufschlussreiche Erklärung unter anderem hierzu gibt es von freak im englischen Forum: http://www.purebasic.fr/english/viewtop ... 92#p416292


P.S. Zeilenumbrüche (im Gegensatz zu Absätzen) bitte lieber dem Browser überlassen... ;)
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Nero
Beiträge: 285
Registriert: 08.11.2004 01:50

Re: Module und "Globale" Strukturen

Beitrag von Nero »

:praise:

Ah :lol: danke :oops: daran hab ich überhaupt nicht gedacht.

:allright:
Antworten