DeclareModule optional?
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
DeclareModule optional?
Hier stand mal was von CodeCommander. Aber er wollte seinen Post unbedingt löschen.
Zuletzt geändert von CodeCommander am 18.01.2015 14:55, insgesamt 1-mal geändert.
~ DELETE ~
Re: DeclareModule
Richtig. Weil Fred das syntaktisch so festgelegt hat. Das hat aber nichts mit dem "sehen" an sich zu tun.CodeCommander hat geschrieben:Dieser Post baut hierauf auf: Hinweise + Vorschläge f. bessere Befehls-Beschreibungen etc.Und wie?? >> Modul benötigt einen DeclareModule Abschnitt, bevor es erstellt wird.Nino hat geschrieben:Natürlich kann PB das Modul auch ohne DeclareModule sehen.
Zweck von DeclareModule ist es festzulegen, welche Teile des Modul öffentlich und welche Teile des Moduls privat sind.CodeCommander hat geschrieben:Der wäre?Nino hat geschrieben:Sinn und Zweck von DeclareModule ist ein anderer.
Referenz-Handbuch hat geschrieben:Nur auf die im DeclareModule Abschnitt deklarierten Elemente kann von außerhalb des Moduls zugegriffen werden. Der gesamte Code im Module Abschnitt wird "privat" für dieses Modul gehalten.
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: DeclareModule
Ich glaube so ganz ohne öffentliche Funktionen, Variablen oder Strukturen macht ein Modul wenig Sinn, oder?
Schaut man sich mal diesen Code hier an...
...so stellt man fest, dass das Modul eigentlich ein komplett abgegrenzter Programmcode ist, den man eigentlich gleich in ein eigenes Programm verfrachten könnte.
So scheint es zumindest. Natürlich könnte man jetzt mit Named Pipes, Threads, Dateien, Runtime oder sonstigen Prozess- und Betriebssystem-weiten Möglichkeiten zwischen privatem Modul und Hauptcode kommunizieren. Aber da gibt es doch einfachere Möglichkeiten, nämlich indem man irgendwas in 'DeclareModule' deklariert, das der Kommunikation zwischen Hauptprogramm und Modul dient.
Da ich gerade so darüber philosophiere, fällt mir ein, dass du wahrscheinlich vorhast mittels der Runtime-Bibliothek zu kommunizieren und so eine Art Plugin-System basteln willst, indem du einfach verschiedene Module hinzufügst und dann per Runtime darauf zugreifen kannst. Wahrscheinlich würdest du deshalb innerhalb des Moduls gerne ohne vorangestellten Modulnamen auf ein Runtime des selben Moduls zugreifen, oder? Denn wenn sich mal der Modul-Name ändert, willst du das nicht überall innerhalb des Moduls auch ändern wollen.
Schaut man sich mal diesen Code hier an...
Code: Alles auswählen
DeclareModule bla
EndDeclareModule
Module bla
Procedure hui()
Debug "buh"
EndProcedure
hui()
EndModule
So scheint es zumindest. Natürlich könnte man jetzt mit Named Pipes, Threads, Dateien, Runtime oder sonstigen Prozess- und Betriebssystem-weiten Möglichkeiten zwischen privatem Modul und Hauptcode kommunizieren. Aber da gibt es doch einfachere Möglichkeiten, nämlich indem man irgendwas in 'DeclareModule' deklariert, das der Kommunikation zwischen Hauptprogramm und Modul dient.
Da ich gerade so darüber philosophiere, fällt mir ein, dass du wahrscheinlich vorhast mittels der Runtime-Bibliothek zu kommunizieren und so eine Art Plugin-System basteln willst, indem du einfach verschiedene Module hinzufügst und dann per Runtime darauf zugreifen kannst. Wahrscheinlich würdest du deshalb innerhalb des Moduls gerne ohne vorangestellten Modulnamen auf ein Runtime des selben Moduls zugreifen, oder? Denn wenn sich mal der Modul-Name ändert, willst du das nicht überall innerhalb des Moduls auch ändern wollen.
Re: DeclareModule
NicTheQuick hat geschrieben:Ich glaube so ganz ohne öffentliche Funktionen, Variablen oder Strukturen macht ein Modul wenig Sinn, oder?

Worauf bezieht sich diese Bemerkung?
Wer hatte etwas von "so ganz ohne öffentliche Funktionen ..." geschrieben?
Aber es müssen eben auch nicht alle Funktionen etc. eines Moduls öffentlich sein.
Wo ist jetzt hier eigentlich das Problem?

- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: DeclareModule
Na zwischendrin war doch die Frage aufgekommen, warum man unbedingt ein 'DeclareModule' braucht, damit PB das Modul sieht. Und dann wollte ich sagen, dass es ganz ohne öffentliche Funktionen ja sowieso wenig Sinn macht.
Hier mal ein Code, wo man auf das DeclareModule verzichten könnte:
Hier mal ein Code, wo man auf das DeclareModule verzichten könnte:
Code: Alles auswählen
EnableExplicit
DeclareModule PluginMap
Declare.i addPlugin(moduleName.s)
Declare.i pluginCount()
Declare.s getPlugin(index.i)
EndDeclareModule
Module PluginMap
Global NewMap pluginMap.i()
Procedure.i addPlugin(pluginName.s)
pluginName = LCase(pluginName)
If (FindMapElement(pluginMap(), pluginName))
Debug "[ERR] Module already added: '" + pluginName + "'."
ProcedureReturn #False
EndIf
ProcedureReturn AddMapElement(pluginMap(), pluginName)
EndProcedure
Procedure.i pluginCount()
ProcedureReturn MapSize(pluginMap())
EndProcedure
Global Dim plugins.s(0)
Procedure.s getPlugin(index.i)
Protected i.i
If (ArraySize(plugins()) <> pluginCount())
ReDim plugins(pluginCount())
ForEach pluginMap()
plugins(i) = MapKey(pluginMap())
i + 1
Next
EndIf
If (index >= pluginCount() Or index < 0)
ProcedureReturn ""
EndIf
ProcedureReturn plugins(index)
EndProcedure
EndModule
DeclareModule bla
EndDeclareModule
Module bla
PluginMap::addPlugin(#PB_Compiler_Module)
Runtime Procedure.i init()
Debug "Modul bla initialisiert."
EndProcedure
EndModule
DeclareModule TollerEffekt
EndDeclareModule
Module TollerEffekt
PluginMap::addPlugin(#PB_Compiler_Module)
Runtime Procedure.i init()
Debug "Modul TollerEffekt initialisiert."
EndProcedure
EndModule
; Initialisiere alle Plugins
Define.i pluginCount.i = PluginMap::pluginCount()
Define.i i
For i = 0 To pluginCount - 1
CallFunctionFast(GetRuntimeInteger(PluginMap::getPlugin(i) + "::init()"))
Next