Seite 2 von 4
Verfasst: 09.05.2006 19:39
von MVXA
falsch geraten...
Verfasst: 09.05.2006 20:37
von Toshy
@real
sag ich ja

Verfasst: 09.05.2006 22:59
von jear
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.
Verfasst: 10.05.2006 13:13
von real
@MVXA:
Naja - bei mir kam beim Test eine Meldung in der Art...
@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.
Verfasst: 10.05.2006 16:16
von jear
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
Wo ist
test denn nun definiert worden? Doch wohl durch
Shared.
Das Beispiel zeigt gut, wie gefährlich und unsinnig die jetzige Konstruktion ist!
Verfasst: 10.05.2006 16:23
von Kaeru Gaman
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...
Verfasst: 10.05.2006 17:20
von jear
Kaeru Gaman hat geschrieben:in diesem falle wurde sie durch das
definiert.
Nein,
test = kann keine Variable definieren.
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
Shared könnte eine gute Möglichkeit sein, zwischen Globals und lokalen Variablen eine Klasse von Variablen zu definieren, die genau den gewünschten Wirkungsraum haben. Ist es aber jetzt leider nicht, sondern weder Fisch noch Fleisch!
Verfasst: 10.05.2006 18:25
von real
@jear: Stimmt, verdammt. Was ist das denn für ein Mist!?
Verfasst: 10.05.2006 19:29
von Kaeru Gaman
stimmt.
wenn man das durch
ersetzt, dann gehts.
ohne den typ ists nur ne zuweisung, recht hast du.
...witzig, dass das erst jetzt jemandem auffällt.
Verfasst: 10.05.2006 19:44
von MVXA
Darauf hab ich in meinem 1. Post in diesem Thread versucht
aufmerksam zu machen aber ihr führt hier gleich ne Seite
lange Diskussion über den Sinn...
