Module in PureBasic, was ist der Zweck?
Verfasst: 28.06.2013 22:51
Ich hab hier mal meine Gedanken zu den Modulen zusammengefasst, weil ich denke, solange es noch
keine finale Version von PB5.20 mit vollständiger Hilfe gibt, ist dies vielleicht sehr hilfreich.
Welchen Zweck haben Module?
- Module sollen größere Softwareprojekte kontrollierbar und übersichtlich machen.
- Universelle Module müssen nur einmal programmiert werden und können wiederverwendet werden.
- Mit Modulen wird der prozedurale Ansatz dahingehend erweitert, das Prozeduren zusammen mit Daten
in logische Einheiten zusammengefasst werden.
Module haben nichts mit Klassen oder OOP zu tun!
Erläuterung:
Code in einem Module hat keinen Zugriff zu bereits im Mainsource definierten Variablen, Konstanten, Prozeduren usw...,
anders herum kann der Mainsource nur auf „exportierte“ Variablen, Konstanten, Prozeduren usw. zugreifen.
Auch Compilerdirektiven wie EnableExplicit im Mainsource haben keinen Einfluss auf das Modul (und umgekehrt).
Dies gilt auch für den Variablen-Default Type. Define.s im Mainsource wird im Modul ignoriert, es ist dort, solange nicht
anders definiert, weiterhin Integer der Default Type.
Ein Modul hat in dieser Hinsicht also eine gewisse Ähnlichkeit zu einer DLL oder einer UserLib, hat aber nicht dieselben
Nachteile.
Kollisionen mit bereits verwendeten Namen, wie Variablennamen, Procedurenamen usw. sind hier weitgehend minimiert.
Kollidieren kann nur der Modulname selber, solange wir einen voll qualifizierten Aufruf in der Form:
Modulname::Funktion() nutzen.
Bei Verwendung von UseModule erhöht sich die Gefahr der Namenskollision allerdings wieder, so das dies mit
Vorsicht zu verwenden ist (der Debugger erkennt dies und gibt eine Meldung aus!).
Es stellt also kein Problem dar, sehr kurze einfache Namen in einem Modul zu verwenden, solange wir dies nur mit
voll qualifizierten Aufruf nutzen. Wer aber UseModule vorzieht, um sich z.B. etwas schreibarbeit zu sparen, sollte,
wie man es meist auch in bisherigen Includes gemacht hat, eindeutigere Namen verwenden.
Auf die Syntax werde ich hier nicht weiter eingehen, das ist eigentlich aus den Beispielen von Fred
ersichtlich. Wer noch ergänzende Erklärungen hat, kann diese gerne posten.
Gruß
Thomas
keine finale Version von PB5.20 mit vollständiger Hilfe gibt, ist dies vielleicht sehr hilfreich.
Welchen Zweck haben Module?
- Module sollen größere Softwareprojekte kontrollierbar und übersichtlich machen.
- Universelle Module müssen nur einmal programmiert werden und können wiederverwendet werden.
- Mit Modulen wird der prozedurale Ansatz dahingehend erweitert, das Prozeduren zusammen mit Daten
in logische Einheiten zusammengefasst werden.
Module haben nichts mit Klassen oder OOP zu tun!
Erläuterung:
Code in einem Module hat keinen Zugriff zu bereits im Mainsource definierten Variablen, Konstanten, Prozeduren usw...,
anders herum kann der Mainsource nur auf „exportierte“ Variablen, Konstanten, Prozeduren usw. zugreifen.
Auch Compilerdirektiven wie EnableExplicit im Mainsource haben keinen Einfluss auf das Modul (und umgekehrt).
Dies gilt auch für den Variablen-Default Type. Define.s im Mainsource wird im Modul ignoriert, es ist dort, solange nicht
anders definiert, weiterhin Integer der Default Type.
Ein Modul hat in dieser Hinsicht also eine gewisse Ähnlichkeit zu einer DLL oder einer UserLib, hat aber nicht dieselben
Nachteile.
Kollisionen mit bereits verwendeten Namen, wie Variablennamen, Procedurenamen usw. sind hier weitgehend minimiert.
Kollidieren kann nur der Modulname selber, solange wir einen voll qualifizierten Aufruf in der Form:
Modulname::Funktion() nutzen.
Bei Verwendung von UseModule erhöht sich die Gefahr der Namenskollision allerdings wieder, so das dies mit
Vorsicht zu verwenden ist (der Debugger erkennt dies und gibt eine Meldung aus!).
Es stellt also kein Problem dar, sehr kurze einfache Namen in einem Modul zu verwenden, solange wir dies nur mit
voll qualifizierten Aufruf nutzen. Wer aber UseModule vorzieht, um sich z.B. etwas schreibarbeit zu sparen, sollte,
wie man es meist auch in bisherigen Includes gemacht hat, eindeutigere Namen verwenden.
Code: Alles auswählen
DeclareModule Name
; hier werden alle "Public" Variablen, Strukturen, Proceduren usw. deklariert.
; Proceduren sollten hier wirklich nur deklariert werden, implementiert werden sie im
; Module Abschnitt!
; Dieser Abschnitt sollte gut dokumentiert sein, so das eine Anwendung des Modules
; nur durch lesen dieses Abschnitt möglich ist, der Rest steht evtl. in einem TEAM
; auch garnicht zur Verfügung
; Wichtig: Dieser Abschnitt ist immer erforderlich! (Ansonsten wäre eine Nutzung auch
; gar nicht möglich ;-)
EndDeclareModule
Module Name
; Alle hier deklarierten Variablen, Strukturen, Proceduren usw., wenn sie nicht im
; DeclareModule deklariert wurden, sind von ausserhalb nicht erreichtbar, auch
; hier Global deklarierte Variablen oder hier deklarierte Konstanten!
EndModule
ersichtlich. Wer noch ergänzende Erklärungen hat, kann diese gerne posten.
Gruß
Thomas