Gibt es soetwas wie self für private Modulvariablen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Gibt es soetwas wie self für private Modulvariablen?

Beitrag von gekkonier »

Ich habe mir eben die neue Modulfunktion angesehen und bin der Meinung: grossartige Neuerung!

Code: Alles auswählen

DeclareModule Test
  Declare.s getString()
EndDeclareModule

Module Test
  testvar.s = "hallo"
  Procedure.s getString()
    ProcedureReturn Test::testvar
  EndProcedure
EndModule

Debug Test::getString()
Hiermit kann ich eine Variable anlegen die privat verwendbar ist. Nehmen wir aber mal an ich möchte das Modul Test refaktorieren, d.h. den Namen des Modules ändern.
Jetzt müsste ich den Code des Modules nach Test:: Fragmenten durchsuchen was mit der Suchen und Ersetzen Funktion ja nicht weiter schlimm wäre.

Viel bequemer und auch aus anderen Sprachen bekannt wäre es doch super, wenn man statt ProcedureReturn Test::testvar z.B. ProcedureReturn _self_::testvar oder ähnliches schreiben könnte. Es würde einem eben das suchen und ersetzen ersparen.

Gibts da was? :mrgreen:
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von Nino »

gekkonier hat geschrieben:Gibts da was? :mrgreen:
Innerhalb des Moduls brauchst Du dessen Namen (also hier "Test::") doch nicht davorzuschreiben. :-)
Du musst die Variable nur z.B. als Global deklarieren, damit sie in der Prozedur bekannt ist:

Code: Alles auswählen

DeclareModule Test
  Declare.s getString()
EndDeclareModule

Module Test
  Global testvar.s = "hallo"
  Procedure.s getString()
    ProcedureReturn testvar
  EndProcedure
EndModule

Debug Test::getString()
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Re: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von gekkonier »

Ah, an das dachte ich erst gar nicht - ich dachte Global heisst global, also Programmweit.
Danke.
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

Re: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von ts-soft »

gekkonier hat geschrieben:Ah, an das dachte ich erst gar nicht - ich dachte Global heisst global, also Programmweit.
Danke.
Ein Module kennt keine der globalen Variablen, Konstanen usw. des aufrufenden Codes. Es ist vollkommen gekapselt,
was ja im endeffekt der Sinn der Sache ist.

Nur was Du im DeclareModule Abschnitt global deklarierst, kann auch im übrigen Code genutzt werden.

Es kann auch Sinnvoll sein, ein DeclareModule Common anzulegen, wo man z.B. überall den Zugriff auf Konstanten
per UseModule ermöglicht, wenn ein Modul auf Globale des MainScopes angewiesen ist.

Hoffentlich ist das jetzt verständlich :wink:

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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von Nino »

@gekkonier:
Global gilt jetzt anscheinend nur noch innerhalb des betr. Moduls oder außerhalb von jeglichem Modul (was ich ziemlich genial finde).

Code: Alles auswählen

Global x = 27

DeclareModule Test
   Declare.s getString()
EndDeclareModule

Module Test
   Debug x
   
   Global testvar.s = "hallo"
   Procedure.s getString()
      ProcedureReturn testvar
   EndProcedure
EndModule

Debug x
Debug testvar
Debug Test::getString()
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Re: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von gekkonier »

Danke für die Erklärungen - die Hilfe wird vermutlich im Zuge der Betas angepasst, oder? Ich habe darüber rein gar nix lesen könne, aber vielleicht auch falsch danach gesucht.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von NicTheQuick »

Während der Betaphasen wird die deutsche Hilfe üblicherweise nicht aktualisiert. Allerdings kann man oftmals in der englischen schon die neuen Sachen finden, wenn auch nicht immer vollständig.
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Re: Gibt es soetwas wie self für private Modulvariablen?

Beitrag von gekkonier »

Alles klar, in hab mein PB komplett in Englisch, da steht noch nix drinnen. Danke.
Antworten