[PB4 B11] kleiner Fehler mit Shared
Große Frage : Macht eine singulare Shared-Definition überhaupt Sinn?
Muss nicht vielmehr mindestens ein Paar Shared-Deklarationen auf die gleiche Variable existieren?
sTemp.s im Hauptprogramm und Shared sTemp.s in einer Prozedur dürften keinesfalls die gleiche Variable meinen!
Gäbe es eine zweite Prozedur mit Shared sTemp.s wäre der Mechanismus von Shared ausgehebelt.
IMHO ist es ein kapitaler Kinken, dass der Compiler ein singulares Shared nicht bemängelt!
Wenn sich zwei Prozeduren eine Variable teilen wollen, dann müsste diese gegen alle Deklarationen abgeschottet sein, die nicht an diesem Verbund teilnehmen.
Die jetzige Implementierung von Shared in PB ist unsinnig und wenig wert, denn sie erlaubt keine privaten Variablen über Prozeduren hinweg.
Insofern ist Shared jetzt nur ein schlechteres Global. Kein Programmteil kann der Integrität von Variablen sicher sein. Das aber wäre es, was Shared ausmachen sollte.
Muss nicht vielmehr mindestens ein Paar Shared-Deklarationen auf die gleiche Variable existieren?
sTemp.s im Hauptprogramm und Shared sTemp.s in einer Prozedur dürften keinesfalls die gleiche Variable meinen!
Gäbe es eine zweite Prozedur mit Shared sTemp.s wäre der Mechanismus von Shared ausgehebelt.
IMHO ist es ein kapitaler Kinken, dass der Compiler ein singulares Shared nicht bemängelt!
Wenn sich zwei Prozeduren eine Variable teilen wollen, dann müsste diese gegen alle Deklarationen abgeschottet sein, die nicht an diesem Verbund teilnehmen.
Die jetzige Implementierung von Shared in PB ist unsinnig und wenig wert, denn sie erlaubt keine privaten Variablen über Prozeduren hinweg.
Insofern ist Shared jetzt nur ein schlechteres Global. Kein Programmteil kann der Integrität von Variablen sicher sein. Das aber wäre es, was Shared ausmachen sollte.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
real hat geschrieben:@jear:
Denk dran: Mit "Shared" definierst Du keine Variable, Du zeigst damit lediglich an, dass Du die bereits definierte Varialbe in der entsprechenden Prozedur nutzen willst.
Code: Alles auswählen
Procedure.s eins()
Shared test.s
test + " eins war dran"
EndProcedure
Procedure.s zwei()
Shared test.s
test + " und zwei war dran"
EndProcedure
test = "Aufrufe : "
eins()
Debug test
zwei()
Debug test
End
Das Beispiel zeigt gut, wie gefährlich und unsinnig die jetzige Konstruktion ist!
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
in diesem falle wurde sie durch das
definiert.
aber grundsätzlich gebe ich dir recht, was deine hinterfragung betrifft.
allerdings habe ich shared bisher so verstanden, dass es proceduren zugriff auf außenliegende, also auf main-ebene befindliche variablen ermöglicht.
variablen gleichen namens ohne shared sind dann proceduren-intern.
somit ist es parallel zu Protected, das ermöglicht proceduren-interne variablen gegen Global deklarierte variablen gleichen namens zu kapseln.
das ganze konzept ist wohl grundsätzlich procedurales gedankengut und konträr zu OOP-prinzipien, aber PB ist bei weitem nicht die einzige Sprache, die ein solches system nutzt.
...wenn mans recht überlegt, ist es schon etwas gruselig, aber wohl "tradition" im proceduralen...
Code: Alles auswählen
test = "Aufrufe : "
aber grundsätzlich gebe ich dir recht, was deine hinterfragung betrifft.
allerdings habe ich shared bisher so verstanden, dass es proceduren zugriff auf außenliegende, also auf main-ebene befindliche variablen ermöglicht.
variablen gleichen namens ohne shared sind dann proceduren-intern.
somit ist es parallel zu Protected, das ermöglicht proceduren-interne variablen gegen Global deklarierte variablen gleichen namens zu kapseln.
das ganze konzept ist wohl grundsätzlich procedurales gedankengut und konträr zu OOP-prinzipien, aber PB ist bei weitem nicht die einzige Sprache, die ein solches system nutzt.
...wenn mans recht überlegt, ist es schon etwas gruselig, aber wohl "tradition" im proceduralen...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Nein, test = kann keine Variable definieren.Kaeru Gaman hat geschrieben:in diesem falle wurde sie durch dasdefiniert.Code: Alles auswählen
test = "Aufrufe : "
Es ist vielmehr das erste Shared, das die Variable test definiert.
Das folgende Beispiel führt schließlich zum Fehler bei der Übersetzung.
Code: Alles auswählen
Declare.s eins()
Declare.s zwei()
test = "Aufrufe : " ; Übersetzungsfehler !
eins()
Debug test
zwei()
Debug test
End
Procedure.s eins()
Shared test.s
test + " eins war dran"
EndProcedure
Procedure.s zwei()
Shared test.s
test + " und zwei war dran"
EndProcedure
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
stimmt.
wenn man das durchersetzt, dann gehts.
ohne den typ ists nur ne zuweisung, recht hast du.
...witzig, dass das erst jetzt jemandem auffällt.
wenn man das durch
Code: Alles auswählen
test.s = "...
ohne den typ ists nur ne zuweisung, recht hast du.
...witzig, dass das erst jetzt jemandem auffällt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.