Aktuelle Zeit: 22.09.2019 20:29

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Module: Defaultparameter mit privater Konstante realisieren
BeitragVerfasst: 17.03.2019 01:08 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Irgendwie ist es nicht möglich in einem Modul einen Defaultparameter einer Prozedur mit einer Konstante zu belegen und die Konstante gleichzeitig als privat zu deklarieren.

Man muss man die Konstante in jedem Fall im Bereich "DeclareModul" deklarieren (sie ist dann nach außen hin sichtbar), andernfalls meckert der Compiler, dass die Prozedur nicht mit der Deklaration übereinstimmt.

Erreichen möchte ich, dass die Konstante #MY_DEFAULT auch im Bereich zwischen UseModule und UnUseModule unten im Hauptcode nicht sichtbar ist. Trotzdem soll diese Konstante als Defaultparameter für die Prozedur MyProc() dienen.

Wie kriegt man das hin?

Code:
DeclareModule Test
   ; Erst wenn man die folgende Zeile auskommentiert, ist die Konstante #MY_DEFAULT wirklich privat,
   ; aber dann meckert der Compiler natürlich, dass er die Konstante für die Proceduredeklaration nicht kennt.
   #MY_DEFAULT = $fffff    ; <- auskommentieren
   Declare MyProc(x.i,y.i,color.i=#MY_DEFAULT) ; <- auskommentieren
   
   ; Versucht man es dann mit so einem Dummy, dann meckert der Compiler, dass Prozedur und Prozedurdeklaration nicht übereinstimmen
   ; Wie kann ich es realisieren, dass ich eine Konstante als Defaultparameter nutzen kann, diese aber privat ist?
   ; Declare MyProc(x.i,y.i,color.i=0)   ; <- einkommentieren
   
EndDeclareModule

Module Test
   #MY_DEFAULT = $fffff
   Procedure MyProc(x.i,y.i,color.i=#MY_DEFAULT)
      ;...
   EndProcedure
EndModule

UseModule Test

; Zum prüfen, ob die Konstante wirklich komplett privat ist, hier einfach mal "#MY_" tippen
; Wenn die Autovervollständigung nicht anspringt, dann ist die Konstante privat.

UnuseModule Test

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 01:52 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Für solche fälle nimm doch PB-Konstanten. Mach ich auch...
Code:
DeclareModule Test
   ; Erst wenn man die folgende Zeile auskommentiert, ist die Konstante #MY_DEFAULT wirklich privat,
   ; aber dann meckert der Compiler natürlich, dass er die Konstante für die Proceduredeklaration nicht kennt.
   ;#MY_DEFAULT = $fffff    ; <- auskommentieren
   Declare MyProc(x.i,y.i,color.i=#PB_Default) ; <- auskommentieren
   
   ; Versucht man es dann mit so einem Dummy, dann meckert der Compiler, dass Prozedur und Prozedurdeklaration nicht übereinstimmen
   ; Wie kann ich es realisieren, dass ich eine Konstante als Defaultparameter nutzen kann, diese aber privat ist?
   ; Declare MyProc(x.i,y.i,color.i=0)   ; <- einkommentieren
   
EndDeclareModule

Module Test
   #MY_DEFAULT = #PB_Default
   Procedure MyProc(x.i,y.i,color.i=#PB_Default)
      ;...
   EndProcedure
EndModule

UseModule Test

; Zum prüfen, ob die Konstante wirklich komplett privat ist, hier einfach mal "#MY_" tippen
; Wenn die Autovervollständigung nicht anspringt, dann ist die Konstante privat.

UnuseModule Test

Debug #PB_Default
Debug #PB_Ignore
Debug #PB_Any
Debug #PB_All

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 01:53 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Eigentlich gar nicht.
Er kann ja nicht nutzen, was er nicht kennt. Ich würde das mit einer zusätzlichen
Prozedur und einer Globalen Variablen machen, falls der User den Defaultwert selbst bestimmen können soll:

Code:
DeclareModule Test
   Declare SetColorDefault(Value)
   Declare MyProc(x.i,y.i,color.i=#PB_Default) ; #PB_Default = -1   
EndDeclareModule

Module Test
 
  Global ColorDefault = #Black
 
  Procedure SetColorDefault(Value)
    ColorDefault = Value 
  EndProcedure
     
  Procedure MyProc(x.i,y.i,color.i=#PB_Default)
    If Color = #PB_Default
      Coolor = ColorDefault
    EndIf
    ; ...
  EndProcedure
EndModule


Aber eine "Public" Prozedur mit einer "Private" Konstanten geht definitiv nicht.

_________________
PureBasic 5.70 LTS (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 02:47 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Gute Idee :wink:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 07:51 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
Kurzer hat geschrieben:
Irgendwie ist es nicht möglich in einem Modul einen Defaultparameter einer Prozedur mit einer Konstante zu belegen und die Konstante gleichzeitig als privat zu deklarieren.

Man muss man die Konstante in jedem Fall im Bereich "DeclareModul" deklarieren (sie ist dann nach außen hin sichtbar), andernfalls meckert der Compiler, dass die Prozedur nicht mit der Deklaration übereinstimmt.

Du sprichst hier natürlich von benannten Konstanten. Damit geht das was Du beschreibst nicht. Es geht allerdings, wenn Du innerhalb von DeclareModule literale Konstanten verwendest.

Kurzer hat geschrieben:
Code:
DeclareModule Test
   
   ; Versucht man es dann mit so einem Dummy, dann meckert der Compiler, dass Prozedur und Prozedurdeklaration nicht übereinstimmen
   ; Declare MyProc(x.i,y.i,color.i=0)   ; <- einkommentieren

EndDeclareModule

Nein, irgendein Dummy funktioniert nicht. Die in DeclareModule verwendete literale Konstante muss schon den selben Wert haben wie die im privaten Module-Teil verwendete benannte Konstante. ;-) So geht's (getestet mit PB 5.70 LTS):

Code:
DeclareModule Test
   Declare MyProc(x.i, y.i, color.i=$ABCDEF)
EndDeclareModule


Module Test
   #MY_DEFAULT = $ABCDEF    ; Diese benannte Konstante ist privat.
   
   Procedure MyProc(x.i, y.i, color.i=#MY_DEFAULT)
      Debug Hex(color)
   EndProcedure
EndModule


; Debug Test::#MY_DEFAULT   ; würde eine Fehlermeldung verursachen

Test::MyProc(100, 100)

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 09:28 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
wieder was gelernt.
vielen dank für eure kommentare. [THUMBS UP SIGN]

ich werde die benannten konstanten öffentlich lassen, das ist am flexibelsten.

gruss kurzer

Gesendet von einem Smartphone

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 11:44 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Wieso sollte denn eine Konstante Privat bleiben?
Ich kann doch mit der Konstanten kein Unfug treiben.
Wenn diese Konstante in einer Prozedure als Voreinstellung genutzt wird, dann möchte der Nutzer diese Voreinstellung doch ggf. selbst auch nutzen. Vorallem genau dann, wenn es möglicherweise mehrere optionale Parameter gibt und ich den mittleren "überspringen" möchte, brauche ich genau diese Konstante.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 11:49 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Eigentlich wollte ich nur wissen, ob dieser Grad an Kapselung in einem Modul möglich ist.
Es ist in der Tat in der Praxis nicht tragisch, wenn die Konstanten sichtbar sind.

Aber manchmal gehen mir solche Sachen durch den Kopf und ich beschäftige mich dann intensiver damit (wehalb ich mit den wirklich wichtigen Dingen meist nur schleppend voran komme :wink:. Aber Einsicht ist der erste Weg zur Besserung :lol:).

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 51.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Module: Defaultparameter mit privater Konstante realisie
BeitragVerfasst: 17.03.2019 12:03 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
STARGÅTE hat geschrieben:
Wieso sollte denn eine Konstante Privat bleiben?

Ich hatte auch schon so eine Situation. Der Code ist sicher noch irgendwo auf meiner Festplatte, ich habe jetzt aber keine Lust ihn zu suchen. :-)
Es kommt auf den Einzelfall an. Es kann sein, dass der Nutzer eines Moduls die betr. Konstanten eben nicht braucht. Wenn sie aber als Public deklariert sind, denkt er evtl., dass er sie irgendwie brauchen könnte. Das Modul wird dadurch unübersichtlicher, v.a. für dessen Nutzer.

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye